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