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

Joo*_*ost 6 c minix

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

#include <minix/drivers.h>
#include <curl/curl.h>
#include <sys/stat.h>
#include <time.h>
#include <assert.h>
#include <string.h>
Run Code Online (Sandbox Code Playgroud)

现在我收到以下错误:

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
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*nes 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.
Run Code Online (Sandbox Code Playgroud)

或者,如果您不需要_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.
Run Code Online (Sandbox Code Playgroud)

当然,您需要相应地更新您的标头。我还建议将修改后的库和标头命名为其他名称,以便清楚地表明您已经修改了它们。