CMake 3.5 中的链接器标志位置
Linker flag positions in CMake 3.5
我有一个很奇怪的问题:如何让 CMake 3.5 将链接器标志放在文件之后? 我正在尝试编译一个调用 Python 脚本的C++。我的CMakeList中有这两行.cpp:
add_executable (Python_trivium PyCall.cpp)
set_target_properties (Python_trivium PROPERTIES COMPILE_FLAGS "${PYTHON_CFLAGS}" Python_trivium PRIVATE "${PYTHON_LDFLAGS}")
这将生成链接错误。使用"make VERBOSE=1",我可以看到链接器命令如下所示:
/usr/bin/c++ -L/usr/lib/python2.7/config-x86_64-linux-gnu -L/usr/lib -lpython2.7 -lpthread -ldl -lutil -lm -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions CMakeFiles/Python_trivium.dir/PyCall.cpp.o -o Python_trivium
标志在文件之前的位置。我从 Python.h 的每个命令收到一个"未定义的引用"错误,例如
/home/portolan/emanuele/MAST_project/pyhelper.hpp:12: undefined reference to `Py_Initialize'
如果我反转并将标志放在文件之后,一切正常:
/usr/bin/c++ CMakeFiles/Python_trivium.dir/PyCall.cpp.o -o Python_trivium -L/usr/lib/python2.7/config-x86_64-linux-gnu -L/usr/lib -lpython2.7 -lpthread -ldl -lutil -lm -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions
有没有办法要求 CMake 以这种方式格式化链接器命令行?
谢谢 米歇尔
我发现我的错误在于尝试手动执行此操作。CMake 可以为我做得更好:
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
message("PYTHONLIBS_VERSION_STRING: ${PYTHONLIBS_VERSION_STRING}")
不幸的是,它找到了 3.5,而我需要 2.7....
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 即使使用调试编译标志,表达式也是"optimized out"
- CMake 3.5 中的链接器标志位置
- C++ - 重置字符串流不会重置获取位置或清除标志吗?
- std::ostringstream将标志放在错误的位置
- Qt读取访问在以下位置发生冲突:0x0,标志=0x0(第一次机会)
- 请参阅当前位置的零重置eof标志
- 编译器标志-l的位置