Чтобы это было просто ... предположим, что у меня есть следующее: A.lib, libB.so (который использует A.lib) и C.exe (который использует libB. так). Примечание. Это Linux, а не Windows. Я просто использую .exe для передачи двоичного типа/цели.Ссылка на .so в g ++ приводит к неопределенным ссылкам
Я просто пытаюсь скомпилировать и связать C.exe в командной строке, поскольку это просто простая тестовая программа. Это линия Я использую:
g++ -I../include C.cpp -o C.exe -L../lib -lB
В результате многие неопределенные ссылки на вещи, которые будут найдены в A.lib. Нет ошибок, ссылающихся на что-либо, экспортированное из libB.so.
Если скопировать libB.so в тот же каталог, и использовать эту команду:
g++ -I../include C.cpp -o C.exe -lB
В результате c.exe построен и может работать без ошибок.
После сборки libB.so мне не нужны библиотеки, которые использовались для его создания. Несмотря на это, я решил попробовать что-то в качестве последней попытки. Я скопировал A.lib в тот же каталог lib, что и libB.so, и снова попробовал исходную команду сборки. Результат был тот же.
Все мысли оценены.
Как вы хотели бы связать 'libB.so'? Вы явно ссылались на 'A.lib'? –
Используйте опцию '-R', в дополнение к' -L'. Для получения дополнительной информации см. Справочную страницу 'ld'. –
Кстати, библиотека 'A' * статическая * библиотека или * динамическая * библиотека? –