C++ 生成库后抛出library.so:未定义符号
我有一个.cpp文件,其中包括来自两个子目录(linoise和noiseutils子文件夹)的文件。 我试图把C++类暴露给Python(我尝试了世界例子,但是当我尝试这个更复杂的任务时,我得到了错误)。我使用usimh CMakeLists.txt编译和创建.so文件。 它工作得很好,它创建了三个.so库(一个在工作目录中,一个在noiseutils中,一个在libnoise中) 当我尝试C++ 生成库后抛出library.so:未定义符号,c++,python,cmake,boost-python,C++,Python,Cmake,Boost Python,我有一个.cpp文件,其中包括来自两个子目录(linoise和noiseutils子文件夹)的文件。 我试图把C++类暴露给Python(我尝试了世界例子,但是当我尝试这个更复杂的任务时,我得到了错误)。我使用usimh CMakeLists.txt编译和创建.so文件。 它工作得很好,它创建了三个.so库(一个在工作目录中,一个在noiseutils中,一个在libnoise中) 当我尝试 import map 它得到错误map.so:未定义符号:ztin5noise6module6modu
import map
它得到错误map.so:未定义符号:ztin5noise6module6moduleee
project (map)
cmake_minimum_required(VERSION 2.8)
find_package(PythonLibs)
include_directories (${PYTHON_INCLUDE_DIRS})
find_package(Boost 1.45.0 COMPONENTS python)
include_directories (${Boost_INCLUDE_DIRS})
set (LIBNOISE_PATH ${MY_SOURCE_DIR}/libnoise)
set (LIBNOISEUTILS_PATH ${MY_SOURCE_DIR}/noiseutils)
add_subdirectory(libnoise)
add_subdirectory(noiseutils)
add_library (
map SHARED
Wrapped.cpp
)
target_link_libraries (
map
boost_python
${PYTHON_LIBRARIES}
${Boost_LIBRARIES}
)
我是否需要以某种方式连接这三个库,或者它已经在工作目录中的一个文件中?(它生成Make文件,编译并生成.so文件,我试图从名称中删除lib,使其与包装文件中的相同,但仍会引发错误)您是否在/etc中更新配置文件并运行ldconfig?可能是您的程序不知道“so”文件的位置。无论哪种方式,您至少必须在创建新的“so”文件后运行ldconfig,以便操作系统了解新的“so”文件。看起来您的“地图”库依赖于库libnoise和noiseutils中的内容,但您没有告诉链接器存在依赖关系。将这些库目标的名称添加到
target\u link\u libraries
指令:
target_link_libraries (
map
libnoise
noiseutils
boost_python
${PYTHON_LIBRARIES}
${Boost_LIBRARIES}
)
注意,我不知道实际的名字是什么。使用与这些子项目中的ADD_LIBRARY
down中相同的名称
使用ldd libmap.so检查前后的结果(或无论名称是什么):它将显示所有.so依赖项,在此修复之后,它应该显示libnoise/noiseutils。可能的重复项