c++ - ld 无法链接到主可执行文件

标签 c++ python macos linker swig

在带有 i686-apple-darwin10-g++-4.2.1 的 OSX 10.6.4 上使用 TextMate 和 Makefile 进行编译,它首先是为 Linux 制作的,我正在尝试为 OSX 进行翻译。

编译 C++ 项目时出现“无法链接主可执行文件”错误:

g++ -Wall -g  -I ~/svnX-Repository/axp-Projekte/xrlfupa/trunk/src/ -I ~/svnX-Repository/boost_1_44_0  -I /opt/local/var/macports/software/boost/1.44.0_0/opt/local/lib/ -I /opt/local/var/macports/software/gsl/1.14_0/opt/local/include/ -o xrfLibTest xrfLibTest.o excitFunctions.o xrfFunctions.o filterFunctions.o detectorFunctions.o -L/opt/local/var/macports/software/boost/1.44.0_0/opt/local/lib/ -L/opt/local/var/macports/software/gsl/1.14_0/opt/local/lib/  -lm -lxrlTUB -lboost_serialization -lgsl -lgslcblas    # Debug 1
ld: in /usr/local/lib/libxrlTUB.so, can't link with a main executable
collect2: ld returned 1 exit status
make: *** [prog] Error 1

提到的库 (libxrlTUB.so) 在它的位置 (/usr/local/lib/libxrlTUB.so) 但是,可能这就是问题所在,libxrlTUB.so 是我自己预先编译的以及。 编译过程通过,是swig生成的,虽然有警告:

g++ -arch x86_64 -m32  -g -fpic -I /usr/include/python2.6 -c PyXrl_wrap.cxx 
In function 'void SWIG_Python_AddErrorMsg(const char*)':
warning: format not a string literal and no format arguments

据我所知,这应该不是问题。 (或者是吗?)

不幸的是,这整件事是大学项目的一部分。实际上,我应该用 python 编写一个 X 射线分析脚本,如果……好吧,如果我不希望使用旨在从这个 c++ 项目中产生的库,那会很好。 (之后它们应该通过在 python 中导入来使用。)

我对 C++ 没有真正的经验,也没有在 OSX 系统上编译的经验。到目前为止,我一直在为 scipting(python、bash 等)而烦恼。所以也许我只是缺少一些简单的东西。希望有人能给我一个提示,让我可以继续阅读以处理上述“无法与主可执行文件链接”错误...

提前致谢, 利亚姆

最佳答案

错误信息告诉你问题所在——/usr/local/lib/libxrlTUB.so 不是共享库;它是一个可执行文件。您不能链接可执行文件。可能您为 libxrlTUB.so 使用的任何构建过程都不了解如何在 Mac 上构建共享库(这更令人怀疑,因为 .dylib 是要使用的正确扩展名。 )

看看 Apple 的 documentation关于编译动态库。您可以使用 file 来确保您的输出是正确的类型,例如:

% gcc -c foo.c
% gcc -dynamiclib foo.o -o foo.dylib
% file foo.dylib
foo.dylib: Mach-O 64-bit dynamically linked shared library x86_64

如果没有 -dynamiclib,您最终会得到一个可执行文件,这可能是您遇到的问题。

关于c++ - ld 无法链接到主可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4179804/

相关文章:

android - "/system/bin/linker: No such file or directory"尝试编译 TensorFlow 时出错

c++ - 以独立于路径/安装/构建的方式了解资源路径的好方法

c++ - 获取释放内存顺序与顺序一致性不同的实际例子是什么?

python - 基于 pandas 条件的列值总和

python - 结合 Sympy 和不确定性

python - 卸载安装有 `pip install .` 的包

c++ - 为什么右值引用整数合法

objective-c - 从停靠栏隐藏应用程序图标,但在任务切换器中保留图标?

ios - 调度定时器源中的数据争用

java - 在 IntelliJ for OSX 中设置 Java 语言级别