c++ - gnat gprbuild : how to build a dynamic dll and link with a static c++ library

标签 c++ dll static-libraries ada

我有一个完整的 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 ...”

有人能帮帮我吗?

问候 格伦

最佳答案

查看 docs ,我认为您应该使用 Library_Options 属性而不是 package Linker:

for Library_Options use ("-L.", "-lbar”);

(我很困惑 - 你是说 myanotherlibrary.lib 还是 bar.lib?)

我有点担心从动态库中使用静态库:我希望使用 -fPIC 或等效开关构建动态库以获得与位置无关的代码,这样就可以在每个使用它的可执行文件的不同地址看到相同的加载库二进制文件。

关于c++ - gnat gprbuild : how to build a dynamic dll and link with a static c++ library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25117653/

相关文章:

visual-studio - 重新创建 COM DLL,我需要担心 GUID 吗?

c# - 动态加载具有其他一些 dll 依赖项的 .NET 程序集

c++ - 我如何从第三方框架和我的源代码创建框架?

c++ - 静态库是否避免了名称重整问题?

c++ - 使用ns3在C++中构建拓扑

c++ - 在编译时获取静态 constexpr 数组的最小值/最大值

c++ - 用数字对 std::strings 进行排序?

asp.net - .dll反编译器

c++ - c lib 是 C++ 程序中的静态吗?

c++ - 是否可以在需要字符串文字时使用 std::string::c_str() ?