From: Greg C. <gch...@sb...> - 2009-06-08 02:16:48
|
On 2009-06-08 00:28Z, Eric Nichols wrote: > > Bad news. MinGW's gcc specification of libraries is VERY specific. A clue on > this can be found in the docs: > http://www.mingw.org/wiki/Specify_the_libraries_for_the_linker_to_use > > So when building the example programs the Makefile had: > $(CC) $(FLAGS) -lcgi gbook.c -o @(CGIBIN)/gbook.cgi > > In MinGW you have to specify the library LAST: > $(CC) $(FLAGS) gbook.c -o @(CGIBIN)/gbook.cgi -lcgi > > Obviously this is a know issue (it's documented). Is there any reason why > this is the case? For the uninitiated (like me) this is a speed bump to > porting code that probably shouldn't be? The only defect is in the makefile. See this GNU/Linux manpage: http://linux.die.net/man/1/ld | | -larchive [...] | The linker will search an archive only once, at the location where | it is specified on the command line. If the archive defines a symbol | which was undefined in some object which appeared before the archive | on the command line, the linker will include the appropriate file(s) | from the archive. However, an undefined symbol in an object appearing | later on the command line will not cause the linker to search the | archive again. As this article: http://article.gmane.org/gmane.os.cygwin/89771 explains, a badly-ordered link command might work on ELF with shared libraries--but fail on ELF with static libraries, and on PE platforms whether static or shared. > Now if there were a simple windows program that can tell you what DLL's a > program requires..... objdump -p my_dll_or_exe | grep "DLL Name" |