Re: [Msys2-users] Avoid reference to libwinpthread-1.dll for 64-bit links

2017-01-20 Thread ralph engels
You might run into a problem using only the static libwinpthread on some 
packages, i speak from experience since

im using a method similar to the suggested one. The problem is that some 
shared libraries linked to the static libwinpthread.a library will throw 
a multiple definition error if the winpthread functions are allready 
referenced in those libraries. To get around that use 
-Wl,--exclude-libs,libpthread.a in LDFLAGS and things should work again.

You could also use -Wl,--allow-multiple-definition but its not 
recomended since i seen examples of it breaking other stuff.


Den 21-01-2017 kl. 03:58 skrev lhmouse:
> On 2017/1/21 6:01, Computer Jock wrote:
>> I hope I know what I'm talking about here...
>>
>> Sometimes (probably with g++) when attempting to create a 64-bit DLL
>> with only windows dependencies one gets a reference to:
>>
>> libwinpthread-1.dll => /mingw64/bin/libwinpthread-1.dll
>>
>> Googling for solutions finds quite a few people having the same problem.
>>
>> Many suggest using:
>>
>>g++ -shared ...
>>-static-libgcc -static-libstdc++
>> -Wl,-Bstatic
>> -lstdc++
>> -lpthread
>> -Wl,-Bdynamic
>>
>> That works for some links but not for others.
>>
>> I ran across this debian bug report from 2014:
>>
>> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=748353
>>
>> It suggests that it would be possible to avoid the reference to
>> libwinpthread-1.dll in favor of the default windows threading library.
>   >
> That is not possible as long as you are using a GCC with the `posix`
> thread model. You have to build one yourself since MSYS2 does not
> provide such a toolchain AFAIK.
>
>> Two related questions:
>>
>> 1) Is there a way to ensure statically linking -lpthread and avoid the
>> reference to libwinpthread-1.dll ?
> Yes. Just delete the file `libwinpthread.dll.a`.
>
> One more word: `-lpthread` is basically *wrong*. To compile and link
> with pthread, use `-pthread` (no `l` there).
>
>> 2) Would the fix (I assume they fixed it for debian) work for the msys2
>> 64-bit gcc?
> Yes. GCC prefers dynamic libraries unless `-static` is given. When a
> dynamic library isn't available it looks for the corresponding static
> library instead. You do have `libwinpthread.a`, no?
>


--
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
___
Msys2-users mailing list
Msys2-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/msys2-users


Re: [Msys2-users] Avoid reference to libwinpthread-1.dll for 64-bit links

2017-01-20 Thread lhmouse
On 2017/1/21 6:01, Computer Jock wrote:
> I hope I know what I'm talking about here...
>
> Sometimes (probably with g++) when attempting to create a 64-bit DLL
> with only windows dependencies one gets a reference to:
>
>libwinpthread-1.dll => /mingw64/bin/libwinpthread-1.dll
>
> Googling for solutions finds quite a few people having the same problem.
>
> Many suggest using:
>
>   g++ -shared ...
>   -static-libgcc -static-libstdc++
>-Wl,-Bstatic
>-lstdc++
>-lpthread
>-Wl,-Bdynamic
>
> That works for some links but not for others.
>
> I ran across this debian bug report from 2014:
>
> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=748353
>
> It suggests that it would be possible to avoid the reference to
> libwinpthread-1.dll in favor of the default windows threading library.
 >
That is not possible as long as you are using a GCC with the `posix` 
thread model. You have to build one yourself since MSYS2 does not 
provide such a toolchain AFAIK.

> Two related questions:
>
> 1) Is there a way to ensure statically linking -lpthread and avoid the
> reference to libwinpthread-1.dll ?
Yes. Just delete the file `libwinpthread.dll.a`.

One more word: `-lpthread` is basically *wrong*. To compile and link 
with pthread, use `-pthread` (no `l` there).

> 2) Would the fix (I assume they fixed it for debian) work for the msys2
> 64-bit gcc?
Yes. GCC prefers dynamic libraries unless `-static` is given. When a 
dynamic library isn't available it looks for the corresponding static 
library instead. You do have `libwinpthread.a`, no?

-- 
Best regards,
LH_Mouse


--
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
___
Msys2-users mailing list
Msys2-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/msys2-users