URL: <https://savannah.gnu.org/support/?111245>
Summary: MSVC removes MAGIC_EXE when -Gw or -GL is specified
Group: GNU Libtool
Submitter: None
Submitted: Fri 23 May 2025 08:47:19 AM UTC
Category: None
Priority: 5 - Normal
Severity: 3 - Normal
Status: None
Privacy: Public
Assigned to: None
Originator Email:
Open/Closed: Open
Discussion Lock: Any
Operating System: Microsoft Windows
_______________________________________________________
Follow-up Comments:
-------------------------------------------------------
Date: Fri 23 May 2025 08:47:19 AM UTC By: Anonymous
In lt-main.in, MAGIC_EXE hold a magic string to distinguish it whether it is a
wrapper executable or not. It's ok on GCC because
__attribute__((externally_visible)) was applied. However, in MSVC, it doesn't
have the similar attributes, then it would be eliminated by -Gw option (an
option like -fdata-sections).
There are two possible solutions came to my mind.
1. Use __pragma(comment(linker, "/INCLUDE:MAGIC_EXE"))
It places /INCLUDE:symbol_name option to linker, but please noticed that
the symbol name is _MAGIC_EXE instead of MAGIC_EXE in x86 (32-bit).
2. Use (void) MAGIC_EXE in any function
It mark MAGIC_EXE as used (even in a strange way) prevent the effect of
-Gw. Yeah, I don't think it is a good way that MSVC doesn't change this
behavior in future.
3. Use another strings to do so
e.g. "libtool-wrapper" or "libtool wrapper (GNU $PACKAGE) $VERSION". I
don't think user will uses these strings in their programs.
_______________________________________________________
Reply to this item at:
<https://savannah.gnu.org/support/?111245>
_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/
signature.asc
Description: PGP signature
