g ++ статическая библиотека зависит от динамических библиотек - PullRequest
0 голосов
/ 13 октября 2010

У меня есть статическая библиотека.например libpuchuu.a это зависит от динамической библиотеки.например libSDL.so (но, конечно, у меня есть libSDL.a) Создать libpuchuu.a очень просто:

ar -rcs object_file_1.o object_file_2.o

Но я не могу связать свой проект с libpuchuu.a!неопределенные ссылки атакуют мою консоль!

На каком-то форуме я нашел такое предложение: все зависимости статической библиотеки находятся в этой библиотеке, если ваши объектные файлы зависят от вас, вы должны распаковать (ar) y объектные файлы в вашу папку,затем упакуйте все объекты в вашу новую библиотеку.Вопросы:

  1. это правда?
  2. если это правда: объектный файл puchuu.o зависит от libSDL.a, как сделать libpuchuu.a?
  3. другимрешение?

PS

Я сделал простой пример и отправил его в pastebin:

http://paste.lisp.org/display/115456

команды построения:

g++ -O3 -c index.cpp -I/usr/local/include/SDL
g++ -O3 -c lib.cpp -I/usr/local/include/SDL
ar rv libpuchuu.a lib.o
g++ -O3 -o program.exe index.o -L/usr/local/lib -lmingw32 -lSDLmain -lSDL -mwindows -lSDL_image -L. -lpuchuu

... неопределенные ссылки из index.cpp!

1 Ответ

2 голосов
/ 13 октября 2010

Вы пытались добавить -lSDL в командную строку вашего компоновщика?

Неопределенные ссылки относятся к символам, которые вы пытаетесь определить в lib.cpp, которые вы используете ar для упаковки в libpuchuu.a.К сожалению, вы не определяете символы, которые, как вы думаете, вы определяете.using namespace sdl; автоматически не приводит к тому, что все, что вы определяете, находится в пространстве имен sdl.Все, что он делает, это упорядочивает его так, что когда компилятор ищет определенное имя, он ищет его в пространстве имен sdl вместе с основным пространством имен.

Вам нужно обернуть функции, определенные в lib.cpp:namespace sdl { .... functions ... } и ваш код будет очень хорошо связываться.

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

Возможно, этот мой опыт применим.

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

...