2016-03-06 2 views
0

Я не могу понять, почему мой бинарный файл не связан с некоторыми библиотеками в файле GNUMake, который я написал. У меня есть:Ссылка на ссылку GNOME не работает для определенных библиотек

LDLIBRARIES += -L/ms/dist/msjava/PROJ/sunjdk/1.6.0_31/.exec/amd64.linux.2.4.glibc.2.3/jre/lib/amd64/ 
LDLIBRARIES += -L/ms/dist/msjava/PROJ/sunjdk/1.6.0_31/.exec/amd64.linux.2.4.glibc.2.3/jre/lib/amd64/sever 
LDLIBRARIES += -L/ms/dist/msjava/PROJ/sunjdk/1.6.0_31/.exec/amd64.linux.2.4.glibc.2.3/jre/lib/amd64/xawt 
LDLIBRARIES += -lmlib_image -lfontmanager -lawt -lmawt 
LDLIBRARIES += -ljvm -lverify -lzip -ljava` 

Двоичный я получаю, когда я запустить команду LDD на нем я не вижу файлы выше быть связаны правильно, даже если они находятся в пути, указанному выше/мс/расстояние/msjava /PROJ/sunjdk/1.6.0_31/.exec/amd64.linux.2.4.glibc.2.3/jre/lib/amd64/ команда LDD на полученном двоичном дает мне:

libmlib_image.so => not found 
libfontmanager.so => not found 
libawt.so => not found 
libjvm.so => not found 
libverify.so =t found 
libzip.so =t found 
libjava.so => not found 

ответ

1

Есть несколько проблем с вашим Makefile. Первый заключается в том, что вы повторяете себя (много). В программировании это обычно считается bad practice.

Вы можете исправить это, например.

JRELIB = /ms/dist/msjava/PROJ/sunjdk/1.6.0_31/.exec/amd64.linux.2.4.glibc.2.3/jre/lib/amd64 
LDLIBRARIES += -L${JRELIB} -L${JRELIB}/server -L${JRELIB}/xawt 

Вторая проблема заключается в том, что вы не понимаете разницы между статическим связыванием и компоновкой времени выполнения.

При запуске make вы выполняете статическое (время сборки), которое успешно завершено.

Когда вы запускаете ldd, вы выполняете ссылку времени выполнения (которая не находит нужные библиотеки).

Для того, чтобы во время выполнения ссылки успеха, вы должны сказать времени выполнения линкера, где библиотеки должны быть найдены (-L... флаг говорит только статический компоновщик, где найти библиотеки). Вы делаете это с -Wl,-rpath=... flag:

LDLIBRARIES += -Wl,-rpath=${JRELIB}:${JRELIB}/server:${JRELIB}/xawt 
+0

Да, проблема была в самом деле с RPATH. –