Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用封闭源代码库分发boost 我有一个应用程序需要使用某个封闭源C++。此API随一些Boost、二进制库文件和所有文件一起分发。我喜欢在自己的代码中使用Boost。我不能仅仅使用他们版本的Boost,因为他们没有分发我需要的Boost的所有部分。我应该如何进行?目标平台是linux,最终也是Windows 我不会通过API边界传递Boost对象 我可以把东西编译成对象文件,这样我的代码就可以使用boost头,而API的代码就可以使用boost头。这一部分似乎很简单 我不懂的是:如何将我的代码链接到Boost库文件,以及如何将API代码链接到Boost库文件。我是否需要围绕API编译我自己的包装器——一个头部不包含Boost的包装器——到一个动态库??(这是我唯一能想到的链接方法。API的Boost库文件中的符号应该与我的Boost库文件中的符号相同。我必须分两个阶段进行链接,不是吗?我唯一能链接一个程序而不链接其余程序的方法是创建一个动态库,不是吗?)_C++_Boost_Multiple Versions - Fatal编程技术网

使用封闭源代码库分发boost 我有一个应用程序需要使用某个封闭源C++。此API随一些Boost、二进制库文件和所有文件一起分发。我喜欢在自己的代码中使用Boost。我不能仅仅使用他们版本的Boost,因为他们没有分发我需要的Boost的所有部分。我应该如何进行?目标平台是linux,最终也是Windows 我不会通过API边界传递Boost对象 我可以把东西编译成对象文件,这样我的代码就可以使用boost头,而API的代码就可以使用boost头。这一部分似乎很简单 我不懂的是:如何将我的代码链接到Boost库文件,以及如何将API代码链接到Boost库文件。我是否需要围绕API编译我自己的包装器——一个头部不包含Boost的包装器——到一个动态库??(这是我唯一能想到的链接方法。API的Boost库文件中的符号应该与我的Boost库文件中的符号相同。我必须分两个阶段进行链接,不是吗?我唯一能链接一个程序而不链接其余程序的方法是创建一个动态库,不是吗?)

使用封闭源代码库分发boost 我有一个应用程序需要使用某个封闭源C++。此API随一些Boost、二进制库文件和所有文件一起分发。我喜欢在自己的代码中使用Boost。我不能仅仅使用他们版本的Boost,因为他们没有分发我需要的Boost的所有部分。我应该如何进行?目标平台是linux,最终也是Windows 我不会通过API边界传递Boost对象 我可以把东西编译成对象文件,这样我的代码就可以使用boost头,而API的代码就可以使用boost头。这一部分似乎很简单 我不懂的是:如何将我的代码链接到Boost库文件,以及如何将API代码链接到Boost库文件。我是否需要围绕API编译我自己的包装器——一个头部不包含Boost的包装器——到一个动态库??(这是我唯一能想到的链接方法。API的Boost库文件中的符号应该与我的Boost库文件中的符号相同。我必须分两个阶段进行链接,不是吗?我唯一能链接一个程序而不链接其余程序的方法是创建一个动态库,不是吗?),c++,boost,multiple-versions,C++,Boost,Multiple Versions,如果您只使用仅标题的boost库,则只需将代码与链接到其他库的代码分开构建即可 您使用的是哪些boost库?给定的可执行文件对于每个符号只能有一段代码。因此,如果他们的库使用BoostV中的符号foo。1和使用boost v中的相同符号。2,那么你会遇到冲突。没有简单的方法可以在不更改符号的情况下消除此冲突。如果您能够将boost代码编译成一个函数,那么应该可以使用动态执行,但这似乎有点过头了 因为在C++中,一个符号被它的类/命名空间所破坏,你也可以改变其中的一个符号来改变符号。 API如何

如果您只使用仅标题的boost库,则只需将代码与链接到其他库的代码分开构建即可


您使用的是哪些boost库?

给定的可执行文件对于每个符号只能有一段代码。因此,如果他们的库使用BoostV中的符号foo。1和使用boost v中的相同符号。2,那么你会遇到冲突。没有简单的方法可以在不更改符号的情况下消除此冲突。如果您能够将boost代码编译成一个函数,那么应该可以使用动态执行,但这似乎有点过头了


<>因为在C++中,一个符号被它的类/命名空间所破坏,你也可以改变其中的一个符号来改变符号。

API如何与它们使用的Boost库链接?他们部署了一个boost-###。那么是用它,还是静态链接

因此,请在您的api中运行“objdump-tapi.So | grep boost”,以检查api是否公开了该增强

此外,他们可能已经像前面提到的用户chrisaycock那样重命名了boost名称空间。使用c++filt命令仔细查看使用“objdump-tapi.so | grep boost”找到的符号

如果它是静态链接的,并且boost符号没有公开(或被重命名),那么您可以在代码中使用boost,而不必考虑API的boost


如果boost真的暴露在外,我建议您尝试使用boost。对于使用boost的代码,可能不会发生冲突。如果发生这种情况,您可以编译一个新的boost并更改名称空间名称。只需运行一个replace all脚本来替换“namespace boost”,比如“namespace boost_1_46”。

我还必须使用第三方的封闭源代码库。他们在库中发布了自己的(非常旧的)Boost版本。幸运的是,他们重新命名了Boost库,比如
BoostSystem\ux86-64\uRedHat\uGCC41\uMDI
,而不是
Boost\uSystem
。不知何故,我的代码实际上构建了。看@chrisaycock你在使用Activ吗?我有相同的文件名!但我怀疑该文件中的符号与我版本的boost中的符号同名,这意味着我的boost将链接到Activ的boost@KitsuneYMG我还没有得到这个链接问题的答案。。。(即使它能工作,我也有点害怕希望它能继续工作。)是的,是的!我只是把他们的动力和我的动力联系起来。我不确定gcc正在做什么来解决任何冲突,但系统工作正常。您使用的是boost的哪些部分?是否仅使用Header,这只是要求违反ODR,因为不同版本的boost在名称空间
boost
中对各种类型和函数有不同的定义。