封闭源代码库包括Boost分发。

9

我正在使用一个闭源库(由Activ Financial提供),其中包含他们API的boost分发,包括一些boost头文件和boost库文件。

我还在我的现有代码库中使用Boost,并且需要从我的现有代码中使用Activ。

一些要点:

  • 我可以封装我的Activ使用,以便整个Activ部分总计只有一个我编写的类,不会暴露任何Activ的头文件
  • 这个单独的头文件不使用任何boost内容
  • 通过这种方式,我可以确保我的代码中的Activ部分使用Activ的Boost HPP文件,而我的代码使用我的Boost的HPP文件

我的担心在于链接。如何确保我的Activ相关代码链接到Activ的Boost,而我的其他代码链接到我的Boost?

我现在使用g++,也会在VS2008中进行此操作。我之前已经在VS2008中做到了,但我不知道所有东西是如何链接的。我想尝试确保它正确地完成。

有没有办法在不进一步将Activ部分封装为动态库的情况下完成呢?

编辑:

首先,我的最终产品始终是可执行文件。其次,我自己静态链接到boost。Activ库包括Boost对象库的静态和动态版本,并且我打算静态链接它。

我从不在使用不同boost版本的代码之间传递Boost对象。

问题是,如何将一个cpp或.o文件链接到一个库文件中的对象,然后确保其他.o文件链接到另一个库文件中的相同对象?这可能吗?

1个回答

3

这个库是动态地还是静态地链接到Boost库的?如果是静态链接的话,此库是否会暴露DLL中的符号(采用declspec export)?

如果这个库是静态链接的且没有暴露符号,并且您没有在自己的DLL中传递任何Boost数据结构(smart_ptr、threads等),那么您很有可能可以安全地在DLL中使用自己版本的Boost库。


请看我的编辑。基本上,当链接时似乎需要一个黑客技巧。我有两个对象库(每个Boost版本),它们具有相同的符号,但对于这些符号,代码不相同,并且我需要确保每个.o文件链接到正确的Boost .a文件。据我所知,链接只能在最后一次全部完成,所以我不确定该怎么做。(对于包含文件,问题更容易解决,因为我可以在gcc中使用不同的-I指令编译每个cpp文件。)我想得对吗? - Scott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接