解决两个外部库中具有相同名称的函数的冲突类型

时间:2012-01-18 21:27:37

标签: c minix

我已将以下库包含在我的代码中。

#include <minix/drivers.h>
#include <curl/curl.h>
#include <sys/stat.h>
#include <time.h>
#include <assert.h>
#include <string.h>

现在我收到以下错误:

In file included from /usr/local/include/curl/curlbuild.h:152
                 from /usr/local/include/curl/curl.h:34
                 from xxx.c:2
/usr/pkg/gcc44/lib/gcc/i686-pc-minix/4.4.3/include-fixed/sys/socket.h:134: error: conflicting types for '_send'
/usr/include/minix/ipc.h:152: note: previous declaration was here

据我所知,这意味着_send已在两个库(minix/drivers.hcurl/curl.h)中声明,我想知道是否有可能解决此问题或解决此问题它在某种程度上?

1 个答案:

答案 0 :(得分:1)

由于您使用的是minix,因此您可以使用objcopy修改其中一个(或两个)库。从手册页:

--redefine-sym old=new
       Change the name of a symbol old, to new.  This can be useful when 
       one is trying link two things together for which you have no source, 
       and there are name collisions.

或者,如果您不需要其中一个库的_send

-L symbolname
--localize-symbol=symbolname
       Make symbol symbolname local to the file, so that it is not visible 
       externally.  This option may be given more than once.

当然,您需要相应地更新标头。我还建议将修改后的库和标题命名为其他内容,以便明确表示已对其进行了修改。