ld无法与主可执行文件链接

时间:2010-11-14 21:33:35

标签: c++ python macos linker swig

在OSX 10.6.4上使用i686-apple-darwin10-g ++ - 4.2.1使用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等)而烦恼。所以也许我只是错过了一些简单的事情。希望有人可以给我一个提示,我可以继续阅读,以处理上述“无法链接主要可执行文件”错误...

Thanx提前, 利安

1 个答案:

答案 0 :(得分:3)

错误消息告诉您问题 - /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,您最终会遇到可执行文件,这可能是您遇到的问题。