bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

undefined reference when linking a dll


From: Sam Steingold
Subject: undefined reference when linking a dll
Date: Wed, 27 Jul 2011 15:40:11 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)

Hi,
I get this error on windows:

i686-w64-mingw32-gcc -shared rawsock.o -Lbase lisp.def -Wl,--export-all-symbols 
-W -Wswitch -Wcomment -Wpointer-arith -Wimplicit -Wreturn-type 
-Wmissing-declarations -Wno-sign-compare -Wno-format-nonliteral 
-falign-functions=4 -D_WIN32 -g -O0 -DDEBUG_OS_ERROR -DDEBUG_SPVW 
-DDEBUG_BYTECODE -DSAFETY=3 -DENABLE_UNICODE -DNO_TERMCAP_NCURSES -DDYNAMIC_FFI 
-DDYNAMIC_MODULES -DNO_GETTEXT -I. -DDLL_EXPORT -DPIC -o 
C:/sds/src/clisp/current/build-mingw-g/dynmod/lib-rawsock.dll 
-Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker 
C:/sds/src/clisp/current/build-mingw-g/dynmod/lib-rawsock.dll
Creating library file: 
C:/sds/src/clisp/current/build-mingw-g/dynmod/lib-rawsock.dll
rawsock.o: In function `readv':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:148: undefined 
reference to `_rpl_recv'
rawsock.o: In function `writev':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:156: undefined 
reference to `_rpl_send'
rawsock.o: In function `C_subr_rawsock_htonl':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:319: undefined 
reference to address@hidden'
rawsock.o: In function `C_subr_rawsock_ntohl':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:335: undefined 
reference to address@hidden'
rawsock.o: In function `C_subr_rawsock_htons':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:353: undefined 
reference to address@hidden'
rawsock.o: In function `C_subr_rawsock_ntohs':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:368: undefined 
reference to address@hidden'
rawsock.o: In function `C_subr_rawsock_socket':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:662: undefined 
reference to `_rpl_socket'
rawsock.o: In function `C_subr_rawsock_socketpair':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:681: undefined 
reference to `_rpl_socket'
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:682: undefined 
reference to `_rpl_socket'
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:683: undefined 
reference to `_rpl_bind'
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:685: undefined 
reference to `_rpl_listen'
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:687: undefined 
reference to `_rpl_getsockname'
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:688: undefined 
reference to `_rpl_connect'
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:689: undefined 
reference to `_rpl_accept'
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:691: undefined 
reference to `_rpl_close'
rawsock.o: In function `C_subr_rawsock_accept':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:742: undefined 
reference to `_rpl_accept'
rawsock.o: In function `C_subr_rawsock_bind':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:751: undefined 
reference to `_rpl_bind'
rawsock.o: In function `C_subr_rawsock_connect':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:760: undefined 
reference to `_rpl_connect'
rawsock.o: In function `C_subr_rawsock_getpeername':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:769: undefined 
reference to `_rpl_getpeername'
rawsock.o: In function `C_subr_rawsock_getsockname':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:778: undefined 
reference to `_rpl_getsockname'
rawsock.o: In function `C_subr_rawsock_sock_listen':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:787: undefined 
reference to `_rpl_listen'
rawsock.o: In function `C_subr_rawsock_recv':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:943: undefined 
reference to `_rpl_recv'
rawsock.o: In function `C_subr_rawsock_recvfrom':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:959: undefined 
reference to `_rpl_recvfrom'
rawsock.o: In function `C_subr_rawsock_sock_read':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:1048: undefined 
reference to `_rpl_recv'
rawsock.o: In function `C_subr_rawsock_send':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:1063: undefined 
reference to `_rpl_send'
rawsock.o: In function `C_subr_rawsock_sendto':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:1100: undefined 
reference to `_rpl_sendto'
rawsock.o: In function `C_subr_rawsock_sock_write':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:1122: undefined 
reference to `_rpl_send'
rawsock.o: In function `C_subr_rawsock_sock_close':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:1130: undefined 
reference to `_rpl_close'
rawsock.o: In function `get_sock_opt':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:1241: undefined 
reference to `_rpl_getsockopt'
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:1260: undefined 
reference to `_rpl_getsockopt'
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:1263: undefined 
reference to `_rpl_getsockopt'
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:1267: undefined 
reference to `_rpl_getsockopt'
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:1275: undefined 
reference to `_rpl_getsockopt'
rawsock.o: In function `set_sock_opt':
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:1356: undefined 
reference to `_rpl_setsockopt'
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:1375: undefined 
reference to `_rpl_setsockopt'
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:1378: undefined 
reference to `_rpl_setsockopt'
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:1382: undefined 
reference to `_rpl_setsockopt'
/cygdrive/c/sds/src/clisp/current/modules/rawsock/rawsock.c:1393: undefined 
reference to `_rpl_setsockopt'
collect2: ld returned 1 exit status
./clisp-link: failed in /cygdrive/c/sds/src/clisp/current/build-mingw-g/full
make: *** [full] Error 1

$ nm libgnu.a | grep rpl_setsockopt
000000c8 T _rpl_setsockopt
$ nm lisp.exe | grep rpl_setsockopt
0055dfbc T _rpl_setsockopt
$ grep rpl_setsockopt lisp.def
        lisp.exe._rpl_setsockopt

this is despite "lisp.exe._rpl_setsockopt" et al being present in
lisp.def IMPORTS section.
note that all the other (non-gnulib) symbols in lisp.exe mentioned in
rawsock.o link just fine, e.g.:

asciz_to_string
$ nm rawsock/rawsock.o | grep asciz_to_string
         U __imp__asciz_to_string
$ nm lisp.exe | grep asciz_to_string
0044731c T _asciz_to_string
$ grep asciz_to_string lisp.def
        lisp.exe.asciz_to_string

and there are no errors about asciz_to_string.

this is because asciz_to_string is declared with __declspec(dllexport)
where it is defined.
there seems to be no way to add such a declaration to the rpl_setsockopt
et al.

if, instead, I add libgnu.a to the command line, I get

libgnu.a(sendto.o): In function `rpl_sendto':
/cygdrive/c/sds/src/clisp/current/build-mingw-g/gllib/../../src/gllib/sendto.c:36:
 undefined reference to address@hidden'

so, how do I create a dll which refers to the gnulib functionality?

-- 
Sam Steingold (http://sds.podval.org/) on CentOS release 5.6 (Final) X 
11.0.60900031
http://www.PetitionOnline.com/tap12009/ http://iris.org.il http://dhimmi.com
http://www.memritv.org http://openvotingconsortium.org http://camera.org
Two wrongs don't make a right, but three rights make a left.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]