Как связать статическую библиотеку со статической библиотекой в ​​Eclipse CDT - PullRequest
4 голосов
/ 06 сентября 2011

У меня есть 3 проекта A, B и C. A универсален и используется B и, в конечном счете, C. B немного более особенный и до сих пор используется только C.

Теперь, когда я хочу Aи B для повторного использования в максимально возможной степени, я думал, что обе статические библиотеки.

Поэтому я связываю A и B со статическими библиотеками, а C - с исполняемым файлом, но когда я хочу связать C, это дает мне немного undefined reference ошибок по функциям.Поэтому я добавил библиотеку A в опции компоновщика, чтобы решить эту проблему, но это не помогло.

Поэтому я подумал: когда я хочу развернуть B, мне также придется развернуть A, чтобы иметь возможность связывать.Есть ли способ связать статическую библиотеку A со статической библиотекой B, чтобы мне не нужно было развертывать 2 файла?

И если да, то как мне добиться этого с помощью Eclipse CDT, потому что я не могу найти место, гдеопределить дополнительные цели для архиватора.

Добавление

Я работаю в Linux, но все должно работать и в Windows.Но в основном мне нужно решение для linux, чтобы продолжать разработку.

EDIT

Сейчас я "решил" проблему, связав A и B со статическими библиотеками.а затем используйте оставшиеся * .o файлы, чтобы связать их в исполняемый файл, но я не считаю это хорошим.

Ответы [ 2 ]

3 голосов
/ 06 января 2012

изменить порядок ссылок. C использует B, а B использует A. C не использует A напрямую, верно?

Вы пишете:

gcc -o C -lA -lB

это не будет работать. ты пишешь

gcc -o C -lB -lA

это работает.

если CDT, вы можете перейти к option-> C / C ++ Build-> setting-> XXX C linker-> Libraries и изменить порядок A и B.

Другой способ: используйте опцию -u.

смотри это: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html НО, Я НИКОГДА не преуспел. Может кто-нибудь сказать мне, как использовать опцию -u?

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

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

...