【发布时间】:2019-09-11 08:22:01
【问题描述】:
我收到一条消息'在制作共享对象时无法使用;用 -fPIC' 重新编译
我尝试了其他示例,问题是一样的。
我试过了
- 从 MODULE 更改为 SHARED
- cmake .. -DCMAKE_CXX_FLAGS=-fPIC
- 和其他变体
这行得通:
c++ -c -fPIC -I/usr/include/python3.6m ../account.cpp
c++ -shared -Wall -Werror -Wl,--export-dynamic account.o -L/usr/local/lib -lboost_python36 -o account.so
这是基本的 cmake
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
project(Test)
find_package(PythonInterp REQUIRED)
find_package(PythonLibs ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR} EXACT REQUIRED)
find_package(Boost 1.70.0 COMPONENTS python REQUIRED)
add_library(account SHARED account.cpp)
target_link_libraries(account Boost::python)
target_include_directories(account PRIVATE ${PYTHON_INCLUDE_DIRS})
set_target_properties(account PROPERTIES PREFIX "")
使用:make VERBOSE=1,输出命令为:
c++ -DBOOST_ALL_NO_LIB -Daccount_EXPORTS -I/usr/include/python3.6m -isystem /usr/local/include -fPIC -o CMakeFiles/account.dir/account.cpp.o -c /src/boost_python_example/account.cpp
c++ -fPIC -shared -Wl,-soname,account.so -o account.so CMakeFiles/account.dir/account.cpp.o /usr/local/lib/libboost_python36.a
所以 cmake 没有得到相同的路径和标志,我正在学习 cmake,所以我试图理解这个问题。显然问题不在于实际的库,而是告诉 cmake 在哪里可以找到合适的库。
【问题讨论】:
-
从头开始,尝试进行详细构建 (
make VERBOSE=1) 以查看实际使用哪些命令(和选项/标志)来构建库。 CMake 是否在做它应该做的事情? -
请在问题帖子中添加准确的错误消息,并附上准确的文件名。在当前形式中,错误描述非常模糊。
标签: c++ cmake boost-python