2010-11-14 6 views
1

На OSX 10.6.4 с i686-apple-darwin10-g ++ - 4.2.1 компиляция с использованием TextMate и Makefile, которая в первую очередь была создана для Linux, и я пытаюсь для перевода на OSX.ld не может ссылаться на основной исполнительный

При компиляции 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/местные /lib/libxrlTUB.so), но, возможно, именно там и возникла проблема, libxrlTUB.so также был скомпилирован заранее. Процесс компиляции прошел, он был сгенерирован глотка, хотя было предупреждение:

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 и т. Д.). Так что, возможно, я просто пропустил что-то простое. Надеюсь, кто-то может дать мне подсказку, где я могу продолжить чтение, чтобы иметь дело с выше «не может связать с главным исполняемым» ошибка ...

Thanx заранее, Лиам

+0

Есть ли публичный SVN-репозиторий библиотеки, чтобы мы могли сами скомпилировать его, чтобы узнать, что является ошибкой? – Yuji

ответ

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

Смежные вопросы