【发布时间】:2014-09-26 20:47:18
【问题描述】:
我想要构建一个完整的 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\”中,但还是没有链接:“undefined reference to ...”
谁能帮帮我?
问候 格伦
【问题讨论】:
-
将 Ada 链接到 C++ 库...在 Ada 中,Import pragmas 必须提供每个对象(函数)名称的 C++ 错位版本,以便 Ada 代码找到它。见wiki.ada-dk.org/c_bindings_example这是你的问题吗?如果没有,请在示例中编辑实际的链接器错误消息。
-
谢谢布赖恩。我确实得到了我的方法“Initialize”的 C++ 错误名称:“Initialize@MyObject_Interface@@SAXPBDAAW4T_MyObject_Status@@@Z (public: static void __cdecl MyObject_Interface::Initialize(enum T_MyObject_Status &))”。链接器仍然不想解析引用“对‘初始化’的未定义引用”。在我的 .ads 文件中,我写道:procedure initialize (Status : out T_MyObject_Status) is procedure C_Initialize (pStatus : out T_MyObject_Status);杂注导入(CPP,C_Initialize,“初始化”);开始 C_Initialize(pStatus => 状态);结束初始化;
-
我认为这可能是问题所在:您需要
pragma Import (CPP, C_Initialize, "c++_mangled_Initialize");,就像我链接到的示例一样。
标签: c++ dll static-libraries ada