UNIX: Связь исполняемого файла со статической и динамической библиотеками? - PullRequest
1 голос
/ 16 сентября 2011

Я признаю, что это домашний вопрос, который спрашивает, возможно ли это. Я считаю, что ответ на него - да, однако я не знаю ответа на вопрос «почему?». Мне кажется, что ответ просто «почему бы и нет?». Может ли кто-нибудь дать более глубокое понимание того, почему это так (или не соответствует действительности, если я ошибаюсь)? Похоже, что этот вопрос можно было бы задать только в том случае, если в этом была какая-то хитрая часть, но из того, что я понимаю о компиляции, нет ничего, что могло бы запретить ссылки на оба.

Ответы [ 2 ]

1 голос
/ 16 сентября 2011

В общем, не должно быть никаких причин, по которым вы не можете ссылаться как на статические, так и на динамические библиотеки, особенно если они не конфликтуют (например, предоставляют одинаковые символы). Механизм для этого будет отличаться в зависимости от вашего компилятора, но многие проекты свободных программ фактически делают это - они статически создают так называемую «удобную библиотеку», которая затем связывается в динамически связанный исполняемый файл.

1 голос
/ 16 сентября 2011

Да, конечно, вы можете связать как статическую библиотеку, так и динамическую библиотеку. Связывание со статической библиотекой по сути аналогично извлечению необходимых объектных файлов из архива и их включению в процесс связывания.

Если статическая библиотека и динамическая библиотека, к которой вы подключаетесь, предназначены для такой же библиотеки , то динамическая ссылка избыточна. Это все еще разрешено делать, но это будет бессмысленно (и просто вводит ненужную зависимость времени выполнения для вашего исполняемого файла, по крайней мере, в Unix).

...