在与我的makefile问题作斗争之后,我现在讨论了两个库应该如何交互的问题。所以,这是在Linux上(CentOS 6.2 - 6.4,这似乎在工具方面差异很大)。项目,从总体上看,是两种口味在混合库类型(静态和动态)方面存在问题
,其用于与其他C++ appications联(A *某文件)- A C++静态库
- 共享*。所以要被部署通过蟒蛇使用Boost.python部署
我有一切编译,但我没有正确链接。在静态库的情况下,它是建立在两个方面:
- 如果为了与其他C++代码链接,
-fPIC
是不使用 - 如果意味着要链接到Python模块, 使用
-fPIC
我通过传递参数给make程序进行控制。目前,我正在尝试构建boost python模块,因为静态的东西编译得很好。所以,我依赖boost库和zlib。最终连接命令看起来像这样:
g++ -o pythonmod.so -L/boost/boost_libs -L/zlibs -lz -lboost_python -lboost_thread -lboost_regex -lboost_system /path/to/static.a -fPIC -shared [many_objects]
的“many_objects”来自于各种包装,和其他代码,即从包装在代码中的Boost.Python层中的“纯” C++。这些目标文件中的每一个都使用-fPIC编译。他们编译为:
g++ -I/boost/boost_1_47 -I/usr/include/python2.6 -D _linux -MMD -std=c++0x -c -m32 -fPIC <input> -o <output>
编译归档文件的目标文件的行看起来与上面非常相似,只是它们不包括python include目录。
我在这里发现了类似问题的其他链接,并尝试了解决方案,但迄今为止无济于事。例如,this link使用-Wl,--whole-archive ... -Wl,--no-whole-archive
。我在尝试在静态库存档中链接-fPIC之前尝试使用此解决方案。现在,我正在这样做,我试过this solution,但也无济于事。在每种情况下,每次我加载python并导入模块时,都会遇到某种未定义的符号错误 - >链接期间出错。
我应该如何将这些库混合在一起以使python模块工作?