Можно ли статически связывать библиотеки общих объектов? - PullRequest
0 голосов
/ 13 декабря 2010

Я создаю библиотеку, которая должна быть динамически связана с моим проектом. Вывод - .so файл, поэтому я думаю, что я на правильном пути. Я обеспокоен тем, как он связывается во время компиляции - путем указания местоположения его make-файла и в зависимости от набора макросов, с которыми я никогда не сталкивался раньше.

Могу ли я предположить, что, поскольку я создаю библиотеку .so (а не .a), я на самом деле динамически связываю ее? Или же .so libs могут быть статически связаны, и в этом случае мне нужно разорвать файлы make / config, чтобы лучше понять, что происходит?

Спасибо

Andrew

1 Ответ

0 голосов
/ 14 декабря 2010

Я не знаком с внутренней структурой исполняемых файлов и общих объектов, поэтому могу дать только некоторые практические советы.

Если вы используете gcc, он должен иметь опцию -shared при связывании объектных файлов в библиотеке - таким образом ld (вызывается gcc) делает общий объект вместо исполняемого двоичного файла.

gcc -shared -o libabc.so *.o ...

Когда вы связываете какое-либо приложение с этим libabc.so, оно должно связываться без ошибок, и после этого с помощью команды ldd вы сможете увидеть libabc.so среди его зависимостей.

$ ldd app
    ...
    libabc.so => ...............
...