Использование общих и статических библиотек Linux C ++ в одной программе - PullRequest
2 голосов
/ 03 марта 2012

Как я могу использовать как общие, так и статические библиотеки C ++ в одной и той же программе для Linux?

При управлении с g ++ я пытался расположить команду -static впереди и позади библиотек, которые мне не нужнысвязывать статически, но без результатов.ld - g++ жалуется на то, где находятся .a файлы общих библиотек ( не может найти -lwhich ошибка).

РЕДАКТИРОВАТЬ : проблема не в не может найти ошибку -lwh независимо , так как это происходит просто потому, что нет статической версии указанной библиотеки.Я пытаюсь указать, какие библиотеки должны быть статически связаны, а какие динамически.

Ответы [ 2 ]

6 голосов
/ 03 марта 2012

Принимая статические libfoo.a и динамические libbar.so, вы можете использовать

g++ -o prog main.o other.o -Wl,-Bstatic -lfoo -Wl,-Bdynamic -lbar

Вы должны избегать вызова функций в статической библиотеке из динамической; это было бы ужасно.

намек

Опции -Wl для g++ используются для передачи аргументов компоновщику ld, вызванному g++.

Вы можете использовать g++ -v, чтобы понять, как g++ вызывает ld, и вы также можете использовать g++ -v -Wl,--verbose, чтобы попросить ld быть многословным.

2 голосов
/ 03 марта 2012

Вам не нужно указывать -static или -dynamic. Формат файла, с которым вы связываетесь, указывает, является ли он общей или статической ссылкой. Вам просто нужно выбрать правильный файл для ссылки.

...