1

我有两个不同的 C 标头(包含extern "C"),从 80% 开始重叠。每个头文件都有不同的 *.lib 及其功能。在我的代码中,我需要在不同的命名空间中使用这两个标头。我可以编译和链接我的程序,但行为似乎将两个库“加入”到一个库中,并且只使用一组函数,而另一个被替换。

编辑:

如果我使用动态链接可以做到吗?每个库都有自己的 dll 并根据创建的对象解析要使用的 dll(取消链接旧的和链接新的 dll,反之亦然)?

4

1 回答 1

3

当您创建一个函数extern "C"时,您会放弃避免名称空间冲突问题的名称修改。根据定义,您是说将有一个具有给定名称的函数,未由类或命名空间信息修饰。

所以,你不能做你想做的事。AC 程序只能使用每个extern "C"功能的一个或另一个副本。C++ 程序只能使用每个extern "C"程序中的一个或另一个。

您必须重命名一个(或两个)库中的函数,以便能够在单个程序中使用这两个库(可能通过向库公开的名称添加不同的系统前缀)。或者,如果库是用 C++ 编写的,则丢失该extern "C"属性。你将不得不改变一些东西来打破命名冲突。

于 2013-10-23T17:01:13.247 回答