在 GNAT 上链接错误 xerces-c

问题描述 投票:0回答:1

我必须使用使用 xerces-c 的 C++ 库。然后我有一个 Ada 项目,它从前面提到的 C++ 库导入两个符号。当我尝试构建 Ada 项目的主体时,出现了一堆未定义的引用,所以我想我没有正确链接到 xerces-c。 我已确保我的路径中有 libxerces-c.a 和标头(我使用的是 CentOS)。

这是我在 gpr 中使用的链接器包,我通过谷歌搜索有类似链接错误的人的帖子发现了它:

package Linker is
  for Linker_Options use ("-Wl", "-Bstatic", "-lxerces-c", "-Wl", "-Bdynamic");
end Linker;

这是链接错误之一的示例:

undefined reference to `xercesc_3_2::XMLPlatformUtils::Initialize(char const*, char const*, xercesc_3_2::PanicHandler*, xercesc_3_2::MemoryManager*)'

我现在通过使用

for Externally_Built use "True";
为 xerces-c 创建一个 gpr 库项目并将 libxerces-c.a 手动放置在该项目的 lib 目录中来解决问题,但这对我来说确实听起来很奇怪。这样链接错误就消失了,一切似乎都正常。

有人遇到过类似的问题吗?

c++ ada xerces gnat
1个回答
0
投票

我的第一个想法是直接提及

.a
库:

package Linker is
   for Switches ("ada") use ("/where/ever/libxerxes-c.a");
end Linker;

(默认的 Ada 链接会像这样调用

libgnat.a
)。

一些链接器在看到库之前需要先看到静态库的调用者;您可以使用

-Wl,-v
查看实际传递给链接器的参数是什么。您将 xerxes-x 库放入外部构建的 GPR 中的方案可能会影响链接器参数的顺序。

© www.soinside.com 2019 - 2024. All rights reserved.