Mam wspólną bibliotekę, którą chcę połączyć plik wykonywalny przed użyciem GCC. Współużytkowana biblioteka ma niestandardową nazwę nie o nazwie libNAME.so, więc nie mogę użyć zwykłej opcji -l. (Zdarza się też, że jest to rozszerzenie Pythona i nie ma przedrostka "lib".)Jak połączyć za pomocą GCC bez -l ani ścieżki hardcoding dla biblioteki, która nie jest zgodna z konwencją nazewnictwa libNAME.so?
Jestem w stanie przekazać ścieżkę do pliku biblioteki bezpośrednio do wiersza poleceń linku, ale powoduje to, że ścieżka biblioteki jest zakodowane na stałe w pliku wykonywalnym.
Na przykład:
g++ -o build/bin/myapp build/bin/_mylib.so
Czy istnieje sposób podłączenia się do tej biblioteki, nie powodując ścieżkę być ustalony w pliku wykonywalnego?
To jest dokładnie to, czego szukałem. Dzięki! – kbluck
Pomogła mi bardzo, dziękuję. –
Zauważyłem, że wynikiem tego jest 'build/bin/_mylib.so' osadzony w bibliotece, która została połączona za pomocą' -l: '- zamiast osadzania samego' _mylib.so', jak to zwykle robi dla standardowych sonames. W rezultacie, podczas próby wczytania '_mylib.so', będzie szukał pełnej ścieżki (' ldd' wyświetliłby ją) i nie znajdzie sam '_mylib.so'. –