emacs-devel
[Top][All Lists]
Advanced

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

Re: Dynamic loading progress


From: Eli Zaretskii
Subject: Re: Dynamic loading progress
Date: Thu, 12 Feb 2015 22:34:56 +0200

> From: Stephen Leake <address@hidden>
> Date: Thu, 12 Feb 2015 14:09:53 -0600
> 
> I had to add to options to the 'gcc' line in modules/curl/Makefile:
> 
>     -std=c99 -I$(ROOT)/nt/inc

Why do you need -std=c99?  What happens if you don't use it?  GCC
defaults to -std=gnu99, which is a superset of c99, so I don't
understand why you needed to insist on strict C99.

I also don't like the -I$(ROOT)/nt/inc thing, it should only be needed
for Emacs-specific system-level stuff.  Why was it needed here?

> Normally those would be added by configure. Perhaps they could be set
> via CFLAGS by the perl script when on mingw64?

Sorry, I don't understand: the Emacs configure script already adds
that directory to the include path.  So what's wrong?

> But then I get link errors:
> 
> address@hidden make
> gcc -shared `pkg-config libcurl --libs` -o curl.so curl.o
> curl.o: In function `Fcurl_make':
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:55: 
> undefined reference to `__imp_curl_easy_init'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:56: 
> undefined reference to `make_save_ptr'
> curl.o: In function `Fcurl_fetch_url':
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:67: 
> undefined reference to `XSAVE_POINTER'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:69: 
> undefined reference to `SSDATA'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:69: 
> undefined reference to `__imp_curl_easy_setopt'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:70: 
> undefined reference to `__imp_curl_easy_setopt'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:71: 
> undefined reference to `__imp_curl_easy_setopt'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:72: 
> undefined reference to `__imp_curl_easy_setopt'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:73: 
> undefined reference to `__imp_curl_easy_perform'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:77: 
> undefined reference to `__imp_curl_easy_strerror'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:78: 
> undefined reference to `make_string'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:81: 
> undefined reference to `builtin_lisp_symbol'
> curl.o: In function `Fcurl_content':
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:89: 
> undefined reference to `XSAVE_POINTER'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:90: 
> undefined reference to `make_string'
> curl.o: In function `Fcurl_free':
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:98: 
> undefined reference to `XSAVE_POINTER'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:100: 
> undefined reference to `__imp_curl_easy_cleanup'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:102: 
> undefined reference to `builtin_lisp_symbol'
> curl.o: In function `init':
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:107: 
> undefined reference to `__imp_curl_global_init'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:110: 
> undefined reference to `intern'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:112: 
> undefined reference to `defsubr'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:113: 
> undefined reference to `defsubr'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:114: 
> undefined reference to `defsubr'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:115: 
> undefined reference to `defsubr'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:117: 
> undefined reference to `builtin_lisp_symbol'
> C:\Projects\emacs\feature\aptel\dynamic-modules-rc3\modules\curl/curl.c:117: 
> undefined reference to `Fprovide'
> collect2.exe: error: ld returned 1 exit status
> Makefile:9: recipe for target 'curl.so' failed
> make: *** [curl.so] Error 1
> 
> pkg-config libcurl --libs returns -L/mingw64/lib -lcurl -lwldap32 -lz 
> -lws2_32 
> 
> The "__imp_curl*" functions are provided by
> /msys64/mingw64/lib/libcurl.dll.a; I assume that's what matches
> '-lcurl'. So I don't understand those errors.

GNU ld is a one-pass linker, so the libraries should be after the
object files.

> The other symbols appear to be Emacs symbols? There was some discussion
> about a special flag for exporting those on Windows; is that '-Xlinker
> -E'? I guess that goes in src/Makefile somewhere?

The unresolved externals that are defined by Emacs are expected: you
need to link against an import library produced as part of building
emacs.exe.  Otherwise all this stuff will not work on Windows, because
the Windows port of the linker must see the import library at link
time.

The flag to produce the import library should be something like this:

   -Wl,--out-implib=libemacs.dll.a

Then you need to link the shared library against -lemacs.

And the link command line should produce curl.dll, not curl.so.



reply via email to

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