2012-01-18 35 views
6

我已將下列庫添加到我的代碼中。解決兩個外部庫中具有相同名稱的函數的衝突類型

#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),我想知道是否有可能被宣佈解決這個問題或以某種方式解決它?

+2

在這個討論中有幾種策略: http://stackoverflow.com/questions/678254/c-function-conflict – TJD 2012-01-18 23:39:33

+0

如果我可能會問,你的代碼到底是做什麼的。這似乎很奇怪,以前這種重疊不會出現。 – 2012-01-19 00:18:10

+0

問題顯示在編譯時而不是鏈接時間。你確定你的程序中需要'curl.h'和'drivers.h'嗎? – 2012-01-19 04:23:58

回答

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. 

當然,你將需要更新您的頭。我還建議將修改過的庫和頭文件命名爲其他內容,因此很明顯你已經修改了它們。

+0

Linux在這個問題中的確切位置在哪裏? – mlp 2012-01-19 01:32:53

+0

好點。我錯誤地認爲minix是linux([它不是](http://www.minix3.org/))。但是,[objcopy仍然可用](http://wiki.minix3.org/en/DevelopersGuide/NewBuildSystem)。 – 2012-01-19 02:52:10

相關問題