Hi, If source files use __attribute__ ((dllexport)) to export symbols, the result DLL looks fine.
But if not use __attribute__ ((dllexport)), the result DLL will export an extra symbol 'InterlockedCompareExchange@12'. I had checked the compiled and link files, do not know why. ------------------- use __attribute__ ((dllexport)) ------------------- $ cat << EOF > t-dll.c __attribute__ ((dllexport)) int get_int() { return 1; } EOF $ i686-w64-mingw32-gcc -c -o t-dll.o t-dll.c $ i686-w64-mingw32-objdump -s t-dll.o | grep -A 5 "Contents of section .drectve" Contents of section .drectve: 0000 202d6578 706f7274 3a226765 745f696e -export:"get_in 0010 74220000 t".. $ i686-w64-mingw32-gcc -shared -o t-dll.dll t-dll.o $ i686-w64-mingw32-objdump -x t-dll.dll | grep -A 20 "The Export Tables" The Export Tables (interpreted .edata section contents) Export Flags 0 Time/Date stamp 51d43aff Major/Minor 0/0 Name 0000a032 t-dll.dll Ordinal Base 1 Number in: Export Address Table 00000001 [Name Pointer/Ordinal] Table 00000001 Table Addresses Export Address Table 0000a028 Name Pointer Table 0000a02c Ordinal Table 0000a030 Export Address Table -- Ordinal Base 1 [ 0] +base[ 1] 14d0 Export RVA [Ordinal/Name Pointer] Table [ 0] get_int Looks good ! ------------------- without __attribute__ ((dllexport)) ------------------- $ cat << EOF > t-dll2.c int get_int() { return 1; } EOF $ i686-w64-mingw32-gcc -c -o t-dll2.o t-dll2.c $ i686-w64-mingw32-objdump -s t-dll2.o | grep -A 5 "Contents of section" Contents of section .text: 0000 5589e5b8 01000000 5dc39090 U.......]... Contents of section .rdata$zzz: 0000 4743433a 2028474e 55292034 2e382e32 GCC: (GNU) 4.8.2 0010 20323031 33303730 33202870 72657265 20130703 (prere 0020 6c656173 65290000 lease).. <<< no section .drectve >>> $ i686-w64-mingw32-gcc -shared -o t-dll2.dll t-dll2.o $ i686-w64-mingw32-objdump -x t-dll2.dll | grep -A 22 "The Export Tables" The Export Tables (interpreted .edata section contents) Export Flags 0 Time/Date stamp 51d4440b Major/Minor 0/0 Name 0000a03c t-dll2.dll Ordinal Base 1 Number in: Export Address Table 00000002 [Name Pointer/Ordinal] Table 00000002 Table Addresses Export Address Table 0000a028 Name Pointer Table 0000a030 Ordinal Table 0000a038 Export Address Table -- Ordinal Base 1 [ 0] +base[ 1] 6f50 Export RVA [ 1] +base[ 2] 14d0 Export RVA [Ordinal/Name Pointer] Table [ 0] InterlockedCompareExchange@12 [ 1] get_int What happened ? Why we have an extra export "InterlockedCompareExchange@12" ? Let's check the link details: cauchy@CRM-SYSLOG:/tmp$ i686-w64-mingw32-gcc -v -shared -o t-dll2.dll t-dll2.o Using built-in specs. COLLECT_GCC=i686-w64-mingw32-gcc COLLECT_LTO_WRAPPER=/home/cauchy/cross/i686-windows-gcc48/libexec/gcc/i686-w64-mingw32/4.8.2/lto-wrapper Target: i686-w64-mingw32 Configured with: /home/cauchy/vcs/svn/gcc/branches/gcc-4_8-branch/configure --prefix=/home/cauchy/cross/i686-windows-gcc48 --with-sysroot=/home/cauchy/cross/i686-windows-gcc48 --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=i686-w64-mingw32 --disable-multilib --disable-nls --enable-checking=release --enable-languages=c,c++,fortran --with-arch=i686 --with-tune=generic Thread model: win32 gcc version 4.8.2 20130703 (prerelease) (GCC) COMPILER_PATH=/home/cauchy/cross/i686-windows-gcc48/libexec/gcc/i686-w64-mingw32/4.8.2/:/home/cauchy/cross/i686-windows-gcc48/libexec/gcc/i686-w64-mingw32/4.8.2/:/home/cauchy/cross/i686-windows-gcc48/libexec/gcc/i686-w64-mingw32/:/home/cauchy/cross/i686-windows-gcc48/lib/gcc/i686-w64-mingw32/4.8.2/:/home/cauchy/cross/i686-windows-gcc48/lib/gcc/i686-w64-mingw32/:/home/cauchy/cross/i686-windows-gcc48/lib/gcc/i686-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/bin/ LIBRARY_PATH=/home/cauchy/cross/i686-windows-gcc48/lib/gcc/i686-w64-mingw32/4.8.2/:/home/cauchy/cross/i686-windows-gcc48/lib/gcc/i686-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/lib/../lib/:/home/cauchy/cross/i686-windows-gcc48/mingw/lib/../lib/:/home/cauchy/cross/i686-windows-gcc48/lib/gcc/i686-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/lib/:/home/cauchy/cross/i686-windows-gcc48/mingw/lib/ COLLECT_GCC_OPTIONS='-v' '-shared' '-o' 't-dll2.dll' '-mtune=generic' '-march=i686' /home/cauchy/cross/i686-windows-gcc48/libexec/gcc/i686-w64-mingw32/4.8.2/collect2 --sysroot=/home/cauchy/cross/i686-windows-gcc48 -m i386pe --shared -Bdynamic -e _DllMainCRTStartup@12 --enable-auto-image-base -o t-dll2.dll /home/cauchy/cross/i686-windows-gcc48/lib/gcc/i686-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/lib/../lib/dllcrt2.o /home/cauchy/cross/i686-windows-gcc48/lib/gcc/i686-w64-mingw32/4.8.2/crtbegin.o -L/home/cauchy/cross/i686-windows-gcc48/lib/gcc/i686-w64-mingw32/4.8.2 -L/home/cauchy/cross/i686-windows-gcc48/lib/gcc/i686-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/lib/../lib -L/home/cauchy/cross/i686-windows-gcc48/mingw/lib/../lib -L/home/cauchy/cross/i686-windows-gcc48/lib/gcc/i686-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/lib -L/home/cauchy/cross/i686-windows-gcc48/mingw/lib t-dll2.o -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt /home/cauchy/cross/i686-windows-gcc48/lib/gcc/i686-w64-mingw32/4.8.2/crtend.o OK, let's check dllcrt2.o, crtbegin.o, t-empty.o, crtend.o, and these libs: -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 $ i686-w64-mingw32-objdump -s i686-w64-mingw32/lib/dllcrt2.o | grep -A 5 "Contents of section .drectve" $ i686-w64-mingw32-objdump -s lib/gcc/i686-w64-mingw32/4.8.2/crtbegin.o | grep -A 5 "Contents of section .drectve" $ i686-w64-mingw32-objdump -s lib/gcc/i686-w64-mingw32/4.8.2/crtend.o | grep -A 5 "Contents of section .drectve" ... $ i686-w64-mingw32-objdump -s i686-w64-mingw32/lib/libkernel32.a | grep -A 5 "Contents of section .drectve" No one export "InterlockedCompareExchange@12", where does it come from ? Regards, Dongsheng
signature.asc
Description: OpenPGP digital signature
------------------------------------------------------------------------------ This SF.net email is sponsored by Windows: Build for Windows Store. http://p.sf.net/sfu/windows-dev2dev
_______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public