Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.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++ 生成库后抛出library.so:未定义符号_C++_Python_Cmake_Boost Python - Fatal编程技术网

C++ 生成库后抛出library.so:未定义符号

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

我有一个.cpp文件,其中包括来自两个子目录(linoise和noiseutils子文件夹)的文件。 我试图把C++类暴露给Python(我尝试了世界例子,但是当我尝试这个更复杂的任务时,我得到了错误)。我使用usimh CMakeLists.txt编译和创建.so文件。 它工作得很好,它创建了三个.so库(一个在工作目录中,一个在noiseutils中,一个在libnoise中)

当我尝试

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。

可能的重复项