У меня есть libSomelib.a, которые могут быть связаны с исполняемым с помощью следующей команды:г ++ связать файл .a и его зависимость в статическом .so
g++ -L. -lsomeLib -lpcrecpp -lpcre -lpthread main.cpp -o main
Но как я мог бы связать общий объект из него, который содержит все зависимости?
Я хочу, чтобы достичь следующего с моим новым someLib.so:
g++ -L. -lsomeLib main.cpp -o main
Я попытался следующие:
g++ -shared -L. -lsomeLib -lpcrecpp -lpcre -lpthread -o libSomelib_static.so
Это дает мне .so файл без каких-либо символов.
PS: Я полностью начинаю компиляторы.
Да, это непростая проблема, но вы просите читателей сделать слишком много, чтобы помочь вам найти решение. Прочитайте [MCVE] (http://stackoverflow.com/help/mcve) и подумайте о том, что вы можете добавить к своему Q, что позволит людям легко копировать/вставлять код и экспериментировать. (Это может быть файл 'libTesta.out', который является только программой« Hello World »с несколькими дополнительными заголовками, ссылающимися на функции в других местах \) Как и все, им приходится все придумывать, правильно? ;-) Удачи. – shellter
Вы пытались использовать ваш .a lib в качестве исходного файла libSomelib.a. то есть g ++ -shared -L. libsomeLib.a -lpcrecpp -lpcre -lpthread -o libSomelib_static.so технически .a файл - это всего лишь коллекция. если это не поможет, хотя вы можете также заглянуть в область видимости https://gcc.gnu.org/wiki/Visibility. То есть скорее всего, компилятор думает, что нет ничего, чтобы экспортировать в библиотеку и уничтожить для вас исключение кода. –
А ... и если вы хотите связать, например, зависимости pthread, вы должны посмотреть на -статический флаг здесь https: // gcc .gnu.org/onlinedocs/gcc/Link-Options.html –