Я не могу связать с основным исполняемым файлом - PullRequest
1 голос
/ 15 ноября 2010

В 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, что было бы хорошо, если бы ... хорошо, если бы я не ожидал использовать библиотеки, предназначенные для этого проекта c ++.(Впоследствии их следует использовать через импорт в python.)

Я не очень разбираюсь ни в c ++, ни в компиляции в системах OSX.До сих пор я занимался скипингом (python, bash и т. Д.).Так что, может быть, я просто упускаю что-то простое.Надеюсь, кто-нибудь подскажет мне, где я могу продолжить чтение, чтобы разобраться с вышеупомянутой ошибкой «не удается связать с основным исполняемым файлом» ...

Заранее спасибо, Лиам

1 Ответ

3 голосов
/ 15 ноября 2010

В сообщении об ошибке сообщается о проблеме: /usr/local/lib/libxrlTUB.so не является общей библиотекой;это исполняемый файл.Вы не можете ссылаться на исполняемый файл.Вероятно, какой бы процесс сборки вы не использовали для libxrlTUB.so, он не понимал, как создавать общие библиотеки на Mac (это более подозрительно, поскольку .dylib - правильное расширение для использования.)

Посмотрите на Apple документация о компиляции динамических библиотек.Вы можете использовать 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 вы получите исполняемый файл, который может быть проблемой, с которой вы столкнулись.

...