c++ - Boost::Python 静态链接

标签 c++ boost makefile boost-python undefined-symbol

我需要在我的项目中静态链接 -lboost_python。这是我的 Makefile:

CC=g++
override CFLAGS+=-c -std=c++11 -Wall -Wextra -Werror
override LFLAGS+=-lboost_python -lpthread -lboost_filesystem -lboost_system -lboost_thread -lcrypto

client: clientmain.o client.o ccommand.o
    $(CC) $(LINK) ../build/datatype.o ../build/utility.o build/clientmain.o build/client.o build/ccommand.o -o \
        build/mylib.so $(LFLAGS)
clientmain.o: main.cpp
    $(CC) $(CFLAGS) -fPIC main.cpp -o build/clientmain.o
client.o: cclient.cpp
    $(CC) $(CFLAGS) -fPIC cclient.cpp -o build/client.o
ccommand.o: ccommand.cpp
    $(CC) $(CFLAGS) -fPIC ccommand.cpp -o build/ccommand.o  

$(LINK) 为“-shared”时,一切正常。但是,当 $(LINK) 是“-static”时,我会收到大量链接器错误“undefined symbol ...”,所有这些都与 boost::python 相关。以下是其中的一些(完整列表非常庞大,无法在此处发布):

/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/Scrt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::call(boost::python::api::object const&)':
(.text+0x20): undefined reference to `PyList_Type'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::call(boost::python::api::object const&)':
(.text+0x35): undefined reference to `PyObject_CallFunction'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::list_base()':
(.text+0x9a): undefined reference to `PyList_New'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::list_base(boost::python::api::object const&)':
(.text+0x114): undefined reference to `PyList_Type'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::list_base(boost::python::api::object const&)':
(.text+0x119): undefined reference to `PyObject_CallFunction'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::append(boost::python::api::object const&)':
(.text+0x18d): undefined reference to `PyList_Type'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::append(boost::python::api::object const&)':
(.text+0x1d1): undefined reference to `PyEval_CallFunction'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::append(boost::python::api::object const&)':
(.text+0x254): undefined reference to `PyList_Append'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::extend(boost::python::api::object const&)':
(.text+0x320): undefined reference to `PyEval_CallFunction'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::index(boost::python::api::object const&) const':
(.text+0x441): undefined reference to `PyEval_CallFunction'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::index(boost::python::api::object const&) const':
(.text+0x471): undefined reference to `PyLong_AsSsize_t'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::pop()':
(.text+0x5ae): undefined reference to `PyEval_CallFunction'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::pop(long)':
(.text+0x691): undefined reference to `PyLong_FromLong'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::pop(long)':
(.text+0x6eb): undefined reference to `PyEval_CallFunction'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::pop(boost::python::api::object const&)':
(.text+0x845): undefined reference to `PyEval_CallFunction'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::remove(boost::python::api::object const&)':
(.text+0x960): undefined reference to `PyEval_CallFunction'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::reverse()':
(.text+0xa4a): undefined reference to `PyList_Type'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::reverse()':
(.text+0xa8b): undefined reference to `PyEval_CallFunction'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::reverse()':
(.text+0xb11): undefined reference to `PyList_Reverse'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::sort()':
(.text+0xbaa): undefined reference to `PyList_Type'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::sort()':
(.text+0xbeb): undefined reference to `PyEval_CallFunction'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::sort()':
(.text+0xc71): undefined reference to `PyList_Sort'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::sort(boost::python::detail::args_proxy const&, boost::python::detail::kwds_proxy const&)':
(.text+0xd49): undefined reference to `PyObject_Call'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::count(boost::python::api::object const&) const':
(.text+0xef1): undefined reference to `PyEval_CallFunction'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::count(boost::python::api::object const&) const':
(.text+0xf21): undefined reference to `PyLong_AsSsize_t'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::insert(long, boost::python::api::object const&)':
(.text+0x1033): undefined reference to `PyList_Type'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::insert(long, boost::python::api::object const&)':
(.text+0x1072): undefined reference to `PyLong_FromLong'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::insert(long, boost::python::api::object const&)':
(.text+0x1095): undefined reference to `PyEval_CallFunction'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.4/../../../../lib64/libboost_python.a(list.o): In function `boost::python::detail::list_base::insert(long, boost::python::api::object const&)':
(.text+0x1134): undefined reference to `PyList_Insert'  

我的 Makefile 有什么问题?

最佳答案

遗漏的符号肯定来自 libpython 因此,您可能可以尝试添加 -lpython2.7 或您想要使用的任何 python 版本。

关于c++ - Boost::Python 静态链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42860994/

相关文章:

c++ - boost.future : are these two pieces of code equivalent?

c++ - Visual Studio 2008 Qt项目配置

c++ - 更改二维矩阵上的值时出现段错误

c++ - 找出类(class)及其 child 中的类(class)类型

c++ - 算法:合并 std::unordered_map

c++ - boost 线程 pthread_mutex_lock 问题

c++ - 如何将套接字绑定(bind)到 ipv6 地址?

c - 界面像c语言吗?

makefile - Scons:运行 make 命令作为目标的依赖项

c - .so 文件如何查找符号?