2012-01-18 12 views
6

He incluido las siguientes bibliotecas en mi código.Resolviendo tipos conflictivos para funciones con el mismo nombre en dos bibliotecas externas

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

Ahora me sale el siguiente error:

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 

Por lo que yo sé, esto significa que _send ha sido declarado en dos bibliotecas (minix/drivers.h y curl/curl.h), me preguntaba si es posible resolver este problema o solucionarlo de alguna manera?

+2

Hay varias estrategias en esta discusión: http://stackoverflow.com/questions/678254/c-function-conflict – TJD

+0

Si puedo preguntar, ¿qué es exactamente el código va a hacer. Parece raro que este tipo de superposición no se hubiera encontrado antes. –

+0

El problema se muestra en tiempo de compilación en lugar de tiempo de enlace. ¿Estás seguro de que necesitas tanto 'curl.h' como' drivers.h' en tu programa? –

Respuesta

1

Dado que está en minix, puede modificar una (o ambas) de las bibliotecas con objcopy. Desde la página del manual:

--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. 

o, si no es necesario _send de una de las bibliotecas:

-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. 

Por supuesto, tendrá que actualizar sus cabeceras en consecuencia. También recomendaría nombrar la biblioteca modificada y los encabezados algo más, así que está claro que los has modificado.

+0

Precisamente ¿dónde se indica Linux en la pregunta? – mlp

+0

Buen punto. Había pensado erróneamente que Minix era Linux ([no lo es] (http://www.minix3.org/)). Sin embargo, [objcopy aún está disponible] (http://wiki.minix3.org/en/DevelopersGuide/NewBuildSystem). –

Cuestiones relacionadas