解决Qt SDK编译affine示例时的error: cannot find -ldemo_shared问题

5星 · 超过95%的资源 需积分: 50 55 下载量 140 浏览量 更新于2024-09-15 收藏 691B TXT 举报
当在Windows 7环境下使用Qt 4.8.2 SDK进行affine等demo的编译时,可能会遇到`error: cannot find -ldemo_shared`这样的错误。这个错误通常发生在链接阶段,意味着编译器无法找到名为`demo_shared`的共享库。以下是一些解决此问题的步骤: 1. 首先,问题在于`arthurwidgets.cpp`文件中的`#include <private/qpixmapdata_p.h>`行。这个头文件可能包含了一些动态链接的依赖,而在你的环境中,你正在使用静态编译的Qt版本(如e:\qt\4.8.2\qmake\qmake.exe,对应于Qt 4.8.0的Static Release)。因此,为了能够编译,你需要临时注释掉这一行,以避免编译过程中的冲突。 2. 接下来,在Qt 4.8.2的Command Prompt环境中(E:\QtSDK\Demos\4.7\shared路径下),执行`qmake -config release`命令。这将配置你的项目为release模式,并创建一个静态库`libdemo_shared.a`。`ar: creating release\libdemo_shared.a`这条消息表明编译过程已经成功创建了静态库。 3. 然后,当你在Qt Creator中打开并尝试编译affine.pro项目时,由于之前的步骤,你需要确保使用与E:\QtSDK\Demos\4.7\shared中相同的qmake工具进行编译,因为这可以保证正确地处理库的链接。如果不这样做,可能会导致链接错误。 按照这些步骤操作后,你应该能够解决`error: cannot find -ldemo_shared`的问题,顺利编译和运行affine demo。然而,长期来看,为了避免此类问题,建议检查你的Qt环境设置,确保所有依赖项都正确配置为静态或动态链接,并且Qt版本与SDK中其他组件兼容。如果需要动态链接,可能需要重新编译Qt库或者调整项目的构建配置。

它的具体实现是这样的,再详细解释一下 bool Spline2dConstraint::Add2dBoundary( const std::vector<double>& t_coord, const std::vector<double>& angle, const std::vector<Vec2d>& ref_point, const std::vector<double>& longitudinal_bound, const std::vector<double>& lateral_bound) { if (t_coord.size() != angle.size() || angle.size() != ref_point.size() || ref_point.size() != lateral_bound.size() || lateral_bound.size() != longitudinal_bound.size()) { return false; } Eigen::MatrixXd affine_inequality = Eigen::MatrixXd::Zero(4 * t_coord.size(), total_param_); Eigen::MatrixXd affine_boundary = Eigen::MatrixXd::Zero(4 * t_coord.size(), 1); for (uint32_t i = 0; i < t_coord.size(); ++i) { const double d_lateral = SignDistance(ref_point[i], angle[i]); const double d_longitudinal = SignDistance(ref_point[i], angle[i] - M_PI / 2.0); const uint32_t index = FindIndex(t_coord[i]); const double rel_t = t_coord[i] - t_knots_[index]; const uint32_t index_offset = 2 * index * (spline_order_ + 1); std::vector<double> longi_coef = AffineCoef(angle[i], rel_t); std::vector<double> longitudinal_coef = AffineCoef(angle[i] - M_PI / 2, rel_t); for (uint32_t j = 0; j < 2 * (spline_order_ + 1); ++j) { // upper longi affine_inequality(4 * i, index_offset + j) = longi_coef[j]; // lower longi affine_inequality(4 * i + 1, index_offset + j) = -longi_coef[j]; // upper longitudinal affine_inequality(4 * i + 2, index_offset + j) = longitudinal_coef[j]; // lower longitudinal affine_inequality(4 * i + 3, index_offset + j) = -longitudinal_coef[j]; } affine_boundary(4 * i, 0) = d_lateral - lateral_bound[i]; affine_boundary(4 * i + 1, 0) = -d_lateral - lateral_bound[i]; affine_boundary(4 * i + 2, 0) = d_longitudinal - longitudinal_bound[i]; affine_boundary(4 * i + 3, 0) = -d_longitudinal - longitudinal_bound[i]; } // std::cout << affine_inequality << std::endl; return AddInequalityConstraint(affine_inequality, affine_boundary); }

2023-07-11 上传