Subject: Re: bug#14055: windows link problem with ".lib" files

From: Andreas Otto <[email-masked]>
Date: Tue, 26 Mar 2013 16:34:13 +0100

Hi,

in addition ...

     1)

my libtooll config -> attachment

     2)

$ sh ./libtool --features
host: x86_64-w64-mingw32
enable shared libraries
disable static libraries

     3)

put the library with absolute path '/cygdrive/c/Tcl/lib/tcl86.lib' does 
not work ...

+ /bin/sh ../../libtool --tag=CC --verbose --mode=link /usr/bin/ccache 
x86_64-w64-mingw32-gcc -std=gnu99 -shared 
-I/home/dev1usr/Project/NHI1/theLink/tclmsgque/../libmsgque 
-I/cygdrive/c/Tcl/include -DMQ_IGNORE_EXTERN -g -Wall -Wcast-align -g 
-O2 -shared -module -avoid-version -no-undefined 
/cygdrive/c/Tcl/lib/tcl86.lib -o tclmsgque.la -rpath /usr/local/lib/NHI1 
tclmsgque_la-MqS_tcl.lo tclmsgque_la-misc_tcl.lo 
tclmsgque_la-msgque_tcl.lo tclmsgque_la-read_tcl.lo 
tclmsgque_la-send_tcl.lo tclmsgque_la-config_tcl.lo 
tclmsgque_la-service_tcl.lo tclmsgque_la-slave_tcl.lo 
tclmsgque_la-MqBufferS_tcl.lo tclmsgque_la-error_tcl.lo 
tclmsgque_la-link_tcl.lo tclmsgque_la-MqFactoryS_tcl.lo 
tclmsgque_la-MqDumpS_tcl.lo ../libmsgque/libtmp.la
libtool: link: rm -fr  .libs/tclmsgque.dll.a
libtool: link: x86_64-w64-mingw32-gcc -std=gnu99 -shared 
.libs/tclmsgque_la-MqS_tcl.o .libs/tclmsgque_la-misc_tcl.o 
.libs/tclmsgque_la-msgque_tcl.o .libs/tclmsgque_la-read_tcl.o 
.libs/tclmsgque_la-send_tcl.o .libs/tclmsgque_la-config_tcl.o 
.libs/tclmsgque_la-service_tcl.o .libs/tclmsgque_la-slave_tcl.o 
.libs/tclmsgque_la-MqBufferS_tcl.o .libs/tclmsgque_la-error_tcl.o 
.libs/tclmsgque_la-link_tcl.o .libs/tclmsgque_la-MqFactoryS_tcl.o 
.libs/tclmsgque_la-MqDumpS_tcl.o  -Wl,--whole-archive 
../libmsgque/.libs/libtmp.a -Wl,--no-whole-archive  -lws2_32 -O2   -o 
.libs/tclmsgque.dll -Wl,--enable-auto-image-base -Xlinker --out-implib 
-Xlinker .libs/tclmsgque.dll.a
Creating library file: 
.libs/tclmsgque.dll.a.libs/tclmsgque_la-MqS_tcl.o: In function 
`Tclmsgque_ThreadExit':
/home/dev1usr/Project/NHI1/theLink/tclmsgque/MqS_tcl.c:86: undefined 
reference to `__imp_Tcl_FinalizeThread'
.libs/tclmsgque_la-MqS_tcl.o: In function `Tclmsgque_ProcessExit':
/home/dev1usr/Project/NHI1/theLink/tclmsgque/MqS_tcl.c:78: undefined 
reference to `__imp_Tcl_Exit'
.libs/tclmsgque_la-MqS_tcl.o: In function `Tclmsgque_MqS_Free':
/home/dev1usr/Project/NHI1/theLink/tclmsgque/MqS_tcl.c:612: undefined 
reference to `__imp_TclFreeObj'
.libs/tclmsgque_la-MqS_tcl.o: In function `Tclmsgque_MqS_Cmd':
/home/dev1usr/Project/NHI1/theLink/tclmsgque/MqS_tcl.c:585: undefined 
reference to `__imp_Tcl_GetIndexFromObjStruct'
/home/dev1usr/Project/NHI1/theLink/tclmsgque/MqS_tcl.c:581: undefined 
reference to `__imp_Tcl_WrongNumArgs'
.libs/tclmsgque_la-MqS_tcl.o: In function `Tclmsgque_StorageDelete':
/home/dev1usr/Project/NHI1/theLink/tclmsgque/MqS_tcl.c:148: undefined 
reference to `__imp_Tcl_GetWideIntFromObj'
/home/dev1usr/Project/NHI1/theLink/tclmsgque/MqS_tcl.c:149: undefined 
reference to `__imp_Tcl_WrongNumArgs'
/home/dev1usr/Project/NHI1/theLink/tclmsgque/MqS_tcl.c:148: undefined 
reference to `__imp_Tcl_WrongNumArgs'
.libs/tclmsgque_la-MqS_tcl.o: In function `Tclmsgque_StorageSelect':

I have to rename the library from 'C:\Tcl\lib\tcl86.lib' to 
'C:\Tcl\lib\libtcl86.a' make the project compile-able

mfg AO

Am 26.03.2013 15:05, schrieb Peter Rosin:
> On 2013-03-26 10:38, Andreas Otto wrote:
>> Hi,
>>
>> from time to time I use my automake/libtool project to build libraries on windows ...
>> this create al least problems ...
>>
>> my actual problem is, I got a tcl distrubution from activestate providing a libraray:
>>
>> C:/Tcl/lib/tcl8.6.lib
>>
>> and using the libtool command:
>>
>>   /bin/sh ../../libtool --tag=CC    --mode=link /usr/bin/ccache x86_64-w64-mingw32-gcc -std=gnu99 -shared -I/home/dev1usr/Project/NHI1/theLink/tclmsgque/../libmsgque -IC:/Tcl/include  -DMQ_IGNORE_EXTERN  -g -Wall -Wcast-align -g -O2 -shared -module -avoid-version -no-undefined*-LC:/Tcl/lib -ltcl86* -o tclmsgque.la -rpath /usr/local/lib/NHI1 tclmsgque_la-MqS_tcl.lo  tclmsgque_la-misc_tcl.lo tclmsgque_la-msgque_tcl.lo  tclmsgque_la-read_tcl.lo tclmsgque_la-send_tcl.lo  tclmsgque_la-config_tcl.lo tclmsgque_la-service_tcl.lo  tclmsgque_la-slave_tcl.lo tclmsgque_la-MqBufferS_tcl.lo  tclmsgque_la-error_tcl.lo tclmsgque_la-link_tcl.lo  tclmsgque_la-MqFactoryS_tcl.lo tclmsgque_la-MqDumpS_tcl.lo ../libmsgque/libtmp.la
>>
>> with "*-LC:/Tcl/lib -ltcl86*" I got the mystic libtool error message that the library is NOT found ...
> It would help if you quoted the error message.
>
>> using the "--debug" option give a hint ....
> It would help if you shared the hint.
>
>> libtool does not serach for the "right" name ...
>>
>> If I copy the file tcl86.lib to libtcl86.a in the same directory ....
>>
>> => everything works fine.
>>
>> and now my question:
>>
>> why does "libtool" on "windows" does NOT search for "*.lib" files
> I'll try to answer when you have provided the above details.
>
>> => enduser would be happy to save debugging hours ;-)
>>
>> Hint, I use the mingw cross compiler but this is NOT the problem.
> Since you are using a cross compiler (presumably still from Cygwin),
> you should not feed it Windows paths, you should feed it POSIX
> paths. I.e. something like "-L/cygdrive/c/Tcl/lib -ltcl86". In addition
> to that, you (or the package) have specified the library before any
> object files, which is not the right thing to do. Try this:
>
> /bin/sh ../../libtool --tag=CC    --mode=link /usr/bin/ccache x86_64-w64-mingw32-gcc -std=gnu99 -shared -I/home/dev1usr/Project/NHI1/theLink/tclmsgque/../libmsgque -I/cygdrive/c/Tcl/include  -DMQ_IGNORE_EXTERN  -g -Wall -Wcast-align -g -O2 -shared -module -avoid-version -no-undefined -L/cygdrive/c/Tcl/lib -o tclmsgque.la -rpath /usr/local/lib/NHI1 tclmsgque_la-MqS_tcl.lo  tclmsgque_la-misc_tcl.lo tclmsgque_la-msgque_tcl.lo  tclmsgque_la-read_tcl.lo tclmsgque_la-send_tcl.lo  tclmsgque_la-config_tcl.lo tclmsgque_la-service_tcl.lo  tclmsgque_la-slave_tcl.lo tclmsgque_la-MqBufferS_tcl.lo  tclmsgque_la-error_tcl.lo tclmsgque_la-link_tcl.lo  tclmsgque_la-MqFactoryS_tcl.lo tclmsgque_la-MqDumpS_tcl.lo ../libmsgque/libtmp.la -ltcl86
>
> Cheers,
> Peter
>