Ма c ОС Stati c против Dynami c Связывание с одинаковым размером исполняемого файла - PullRequest
0 голосов
/ 11 апреля 2020

Есть библиотека c ++, с которой я пытался связать статически и динамически. Я сгенерировал файл .so и установил его по пути, правильно установив имя_установки, LIBRARY_PATH и LD_LIBRARY_PATH.

Но проблема в том, что я не вижу никакой разницы в размере исполняемого файла, производимого в обоих случаях

Мой Makefile выглядит следующим образом:

# dynamic linking
alld:
    g++ -std=c++11 -O3  main.cpp -o main -lpthread -lm -ldlib
alls:
# static linking
    g++ -std=c++11 -O3 main.cpp -o main /Users/prakhar/bin/lib/static/dlib.a -lpthread -lm

В обоих случаях я получаю одинаковый размер исполняемого файла.

Когда я статически связываю и удаляю библиотеку, она все еще работает. Так что это действительно статически связано. Но когда я динамически связываю и удаляю разделяемую библиотеку, она вообще не запускается.

Почему это происходит?

Я использую MacOS Catalina.

1 Ответ

0 голосов
/ 12 апреля 2020

Почему это происходит?

Вы действительно используете библиотеку dlib в своей main.cpp?

Если вы не Таким образом, наблюдаемое поведение легко объяснить: при связывании stati c или dynamici c библиотека не используется, и поэтому ни одна ее часть не связывается с двоичным файлом в случае соединения stati c. В случае связывания Dynami c компоновщик записывает, что эта библиотека необходима во время выполнения, поэтому ее удаление (естественно) предотвращает запуск исполняемого файла.

...