我有一个完整的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 \”目录中,但它仍然没有链接:“未定义引用...”
有人可以帮我吗?
此致 格伦
答案 0 :(得分:2)
查看docs,我认为您应该使用Library_Options
属性而不是package Linker
:
for Library_Options use ("-L.", "-lbar”);
(我很困惑 - 您的意思是myanotherlibrary.lib
还是bar.lib
?)
我有点担心使用动态库中的静态库:我希望动态库可以用-fPIC
或等效的开关来构建,以获得与位置无关的代码,这样就可以了可以在使用它的每个可执行文件的不同地址看到加载的库二进制文件。
答案 1 :(得分:0)
这是我最终找到的解决方案。
project My_grp_project is for Languages use ("Ada"); for Source_Dirs use (".", "source", "source\common"); for Library_Dir use “dll"; for Library_Ali_Dir use "ali"; for Object_Dir use "obj"; for Library_Name use "My_grp_project"; for Library_Kind use "dynamic"; for Library_Options use ("path\myanotherlibrary.a", "path_to_GNAT\libstdc++.a"); end My_grp_project;
瞧。 谢谢!