C++ 如何修复:';制作共享对象时不能使用;使用-fPIC'重新编译;使用Cmake。使用普通g++;作品
我收到一条消息“创建共享对象时不能使用”;使用-fPIC'重新编译 我尝试过其他例子,问题也是一样的 我试过了C++ 如何修复:';制作共享对象时不能使用;使用-fPIC'重新编译;使用Cmake。使用普通g++;作品,c++,cmake,boost-python,C++,Cmake,Boost Python,我收到一条消息“创建共享对象时不能使用”;使用-fPIC'重新编译 我尝试过其他例子,问题也是一样的 我试过了 从模块更改为共享 克马克-DCMAKE_CXX_标志=-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
- 从模块更改为共享
- 克马克-DCMAKE_CXX_标志=-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_minimum_required(VERSION 3.10 FATAL_ERROR)
project(Test)
option(BUILD_SHARED_LIBS "Build libraries as shared as opposed to static" ON)
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 "")
这是基本的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,所以我试图理解这个问题。显然,问题不在于实际的LIB,而在于告诉cmake在哪里可以找到合适的LIB。解决方案非常简单。比较两个命令cmake命令中缺少的内容是:--export dynamic 因此,我使用选项解决了这个问题(BUILD_SHARED_LIBS“BUILD libraries as SHARED而非static”ON)非常有趣,需要注释 工作解决方案:
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_minimum_required(VERSION 3.10 FATAL_ERROR)
project(Test)
option(BUILD_SHARED_LIBS "Build libraries as shared as opposed to static" ON)
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
)以查看实际使用了哪些命令(以及选项/标志)来构建库。CMake正在做它应该做的事情吗?请在问题帖子中添加准确的错误消息,并使用准确的文件名。在目前的形式中,错误描述非常模糊。