Я пытался заставить это работать некоторое время и не могу найти ответ в другом месте, вот моя проблема.
Когда я создаю статическую библиотеку в Visual C ++, все зависимости, которые использует эта библиотека, переносятся в исполняемую программу, с которой я связываю библиотеку. Вот пример
Test.lib зависит от
— SDL
— OpenGL
TestApp.exe ссылки Test.lib
В Visual C ++ мне не нужно добавлять зависимости для Test.lib в мой исполняемый файл TestApp, они переносятся, и это прекрасно работает.
Однако, когда я портирую свой код в Linux g ++ (с IDE Code :: Blocks), если я создаю статическую библиотеку, которая находится в .a в g ++, и я создаю TestApp, который связывает библиотеку, он получает неопределенные ссылки на зависимости.
Может ли g ++ сделать это, и если да, то чего мне не хватает, чтобы перенести зависимости в мой исполняемый файл?
Что касается моих настроек для моей библиотеки, я просто использую настройки статической библиотеки IDE.
С помощью компилятора Microsoft заголовочные файлы могут содержать информацию о зависимостях библиотек (исходные файлы тоже, но обычно это делается в заголовках); это компилируется в объектный файл, и компоновщик понимает и применяет эту информацию. Это может быть удобно: вам не нужно запоминать длинные, причудливые имена, и если вы скомпилируете два исходных файла с несовместимыми параметрами, вы можете получить конфликт имен библиотек, на который будет жаловаться компоновщик. Большинство компиляторов и компоновщиков такого не делают, и вы должны явно указать компоновщику, с какими библиотеками вы хотите связать.
Статические библиотеки не связаны статически с другими библиотеками. Это звучит правильно?
Однако вы можете упаковать много объектных файлов вместе с инструментом под названием Арканзас.
Вероятно, что происходит в Windows, потому что у вас есть (SDL, opengl32) dll где-то в системном пути env.