У меня есть полный проект Ada, который я хочу построить, чтобы получить динамическую DLL.
Поэтому я должен связать его с другой статической библиотекой (myanotherlibrary.lib).
Я использую эту командную строку:
gprbuild -d "D:\My_grp_project\My_grp_project.gpr"
Вот содержание .gpr:
project My_grp_project is
Architecture := "x86";
for Languages use ("Ada");
for Source_Dirs use (".", "source", "source\common");
for Library_Dir use "dll\" & Architecture;
for Library_Ali_Dir use "ali\" & Architecture;
for Library_Name use "My_grp_project";
for Library_Kind use "dynamic";
for Object_Dir use "obj\" & Architecture;
package Linker is
for Default_Switches ("Ada") use ("-L.", "-lbar");
end Linker;
end My_grp_project;
Я поместил «myanotherlibrary.lib» в каталог «D: \ My_grp_project \», но он по-прежнему не ссылается: «неопределенная ссылка на …»
Может ли кто-нибудь помочь мне, пожалуйста?
С уважением
лощина
Глядя на документы, Я думаю, что вы должны использовать Library_Options
атрибут вместо package Linker
:
for Library_Options use ("-L.", "-lbar”);
(Я запутался — ты имеешь в виду myanotherlibrary.lib
или же bar.lib
?)
Я был бы немного обеспокоен использованием статической библиотеки из динамической библиотеки: я ожидал, что динамическая библиотека будет построена с -fPIC
или эквивалентный ключ для получения позиционно-независимого кода, чтобы один и тот же загруженный двоичный файл библиотеки можно было видеть по разным адресам в каждом из исполняемых файлов, использующих его.
Вот решение, которое я наконец нашел.
Проект My_grp_project является для использования языков («Ада»); для использования Source_Dirs (".", "source", "source \ common"); для Library_Dir используйте «dll»; для Library_Ali_Dir используйте «ali»; для Object_Dir используйте «obj»; для Library_Name используйте «My_grp_project»; для Library_Kind используйте «dynamic»; для использования Library_Options ("path \ myanotherlibrary.a", "path_to_GNAT \ libstdc ++. a"); end My_grp_project;
Вуаля.
Спасибо !