Разрешение конфликтующего типа для функций с одинаковым именем в двух внешних библиотеках - PullRequest
6 голосов
/ 19 января 2012

Я включил в свой код следующие библиотеки.

#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.h и curl/curl.h), мне было интересно, можно ли решить эту проблему или как-то обойти ее?

1 Ответ

1 голос
/ 19 января 2012

Поскольку вы используете 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.

Конечно, вам нужно будет соответствующим образом обновить заголовки.Я также рекомендовал бы назвать измененную библиотеку и заголовки как-нибудь еще, чтобы было ясно, что вы их изменили.

...