Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何修复:';制作共享对象时不能使用;使用-fPIC'重新编译;使用Cmake。使用普通g++;作品_C++_Cmake_Boost Python - Fatal编程技术网

C++ 如何修复:';制作共享对象时不能使用;使用-fPIC'重新编译;使用Cmake。使用普通g++;作品

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

我收到一条消息“创建共享对象时不能使用”;使用-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 -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正在做它应该做的事情吗?请在问题帖子中添加准确的错误消息,并使用准确的文件名。在目前的形式中,错误描述非常模糊。