我有两个不同的 C 标头(包含extern "C"
),从 80% 开始重叠。每个头文件都有不同的 *.lib 及其功能。在我的代码中,我需要在不同的命名空间中使用这两个标头。我可以编译和链接我的程序,但行为似乎将两个库“加入”到一个库中,并且只使用一组函数,而另一个被替换。
编辑:
如果我使用动态链接可以做到吗?每个库都有自己的 dll 并根据创建的对象解析要使用的 dll(取消链接旧的和链接新的 dll,反之亦然)?
我有两个不同的 C 标头(包含extern "C"
),从 80% 开始重叠。每个头文件都有不同的 *.lib 及其功能。在我的代码中,我需要在不同的命名空间中使用这两个标头。我可以编译和链接我的程序,但行为似乎将两个库“加入”到一个库中,并且只使用一组函数,而另一个被替换。
编辑:
如果我使用动态链接可以做到吗?每个库都有自己的 dll 并根据创建的对象解析要使用的 dll(取消链接旧的和链接新的 dll,反之亦然)?
当您创建一个函数extern "C"
时,您会放弃避免名称空间冲突问题的名称修改。根据定义,您是说将有一个具有给定名称的函数,未由类或命名空间信息修饰。
所以,你不能做你想做的事。AC 程序只能使用每个extern "C"
功能的一个或另一个副本。C++ 程序只能使用每个extern "C"
程序中的一个或另一个。
您必须重命名一个(或两个)库中的函数,以便能够在单个程序中使用这两个库(可能通过向库公开的名称添加不同的系统前缀)。或者,如果库是用 C++ 编写的,则丢失该extern "C"
属性。你将不得不改变一些东西来打破命名冲突。