Вопрос по c++, linux, undefined-reference, arm, shared-libraries – Неопределенная ссылка на 'dlsym' и 'dlopen'

6

Я компилирую с использованием arm-linux-gnueabi-g ++ версии 4.7.3.

У меня есть библиотеки arm-linux-gnueabi, установленные по адресу:

/ usr / arm-linux-gnueabi / lib, содержит libdl.a, libdl.so, libdl.so.2 и libdl-2.19.so.

libdl.so ссылается на libdl.so.2, который ссылается на libdl-2.19.so.

Я пытаюсь установить связь с библиотекой dl (см. Строку команды ниже), но всегда получаю неопределенные ошибки ссылок.

arm-linux-gnueabi-g++ -I. -I../ -I../Comms/Linux  -Wall -DLINUX -fpic -o ../../work/MyProgram main.o
-L../../work -L/usr/arm-linux-gnueabi/lib -lComms -lConsole -lUtilities -ldl
../../work/libUtilities.so: undefined reference to `dlsym'
../../work/libUtilities.so: undefined reference to `dlopen'
collect2: error: ld returned 1 exit status

Если я компилирую, используя g ++ 4.8.2, используя следующее commend, тогда моя программа компилируется, связывается и выполняется нормально.

g++ -I. -I../ -I../Comms/Linux  -Wall -DLINUX -fpic -o ../../work/MyProgram main.o
-L../../work -lComms -lConsole -lUtilities -ldl

Очевидно, он не может найти библиотеку libdl.so; Я думал, что, добавив путь к местоположению соответствующей библиотеки с помощью-L Флаг решит проблему, но это не так.

Чего мне не хватает в команде компилятора ARM?

возможный дубликатНеопределенная ссылка на 'dlsym' Alexander Shishenko

Ваш Ответ

1   ответ
10

-Wl,--no-as-needed флаг перед-ldl, Я столкнулся с этим флагом, прежде чем задал вопрос, но, видимо, набрал его неправильно, потому что он мне не помог.

Я не понимаю, зачем нужен флаг, но код заканчивает линковку сейчас.

ТАК пользовательВот говорит, что это связано с последними (на момент публикации пользователя, 2013) версиями gcc, ссылающимися на --as-required.

Вы сэкономили мне много времени, спасибо. Joel Teply

Похожие вопросы