Cygwin gcc 创建损坏的二进制文件 - 过程入口点无法位于动态 link 库中
Cygwin gcc creates corrupted binary - the procedure entry point could not be located in the dynamic link library
我一直在使用 Cygwin64 gcc 在 Windows 上生成我的程序的夜间构建。不确定从什么时候开始,从 cygwin64(8.0 或 9.x)上的 gcc 创建的 exe 在 运行ning 时静默退出。使用strace,错误显示为
"The procedure entry point could not be located in the dynamic link library"
要重现此问题,您可以 运行 在 cygwin64 终端中执行以下命令
git clone https://github.com/fangq/mcxcl.git
cd mcxcl/src
make clean
make
../bin/mcxcl
由于my other question中描述的原因,我只能使用cygwin gcc (x86_64-pc-cygwin-gcc.exe
/x86_64-pc-cygwin-g++.exe
)编译它,而不能使用mingw64 gcc。该代码需要 OpenCL.dll(通常随图形驱动程序一起提供,位于 C:\Windows\System32\
)
然而,即使编译也没有给出任何错误,一旦生成二进制文件../bin/mcxcl
,运行立即returns 将其returns 没有任何消息。 运行 strace ../bin/mcxcl
打印上面的入口点错误。
运行 在 MSYS2 中使用 gcc 包(不是 mingw64-gcc!)的相同命令,输出可执行文件很好。 MSYS2 和 Cygwin64 中的 gcc 版本相同 (9.3)。
有人能告诉我这两种环境之间有什么不同吗?如果可以的话,怎么打工?实际上,它曾经有效。但是在最近的一些 cygwin 升级后坏了。
原来问题是由 link 使用 OpenCL.dll
文件引起的。
这是在 Cygwin
中使用 OpenCL.dll link 的默认且不正确的方法
g++ *.obj -lOpenCL -static -o ../bin/mcxcl
即使 C:\Windows\System32\OpenCL.dll
被 ldd
列出,二进制文件也没有 运行 正确(见下面的日志)。很奇怪,即使系统上没有libOpenCL,g++仍然毫无怨言地输出一个二进制文件。
记录 OpenCL.dll 被错误地 link 编辑
fangq@zen:~/space/git/Project/github/mcxcl/src$ g++ -v mcx_host.obj mcx_utils.obj tictoc.obj mcxcl.obj mcx_shapes.obj cjson/cJSON.obj -L"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0"/lib/x64 -lOpenCL -o ../bin/mcxcl
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/lto-wrapper.exe
Target: x86_64-pc-cygwin
...
Thread model: posix
gcc version 9.3.0 (GCC)
COMPILER_PATH=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/:/usr/lib/gcc/x86_64-pc-cygwin/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/:/usr/lib/gcc/x86_64-pc-cygwin/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/bin/
LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/lib/../lib/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/lib/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64' '-o' '../bin/mcxcl.exe' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/collect2.exe -plugin /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/cyglto_plugin.dll -plugin-opt=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/lto-wrapper.exe -plugin-opt=-fresolution=/tmp/ccfQi5vc.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lcygwin -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id -m i386pep --wrap _Znwm --wrap _Znam --wrap _ZdlPv --wrap _ZdaPv --wrap _ZnwmRKSt9nothrow_t --wrap _ZnamRKSt9nothrow_t --wrap _ZdlPvRKSt9nothrow_t --wrap _ZdaPvRKSt9nothrow_t -Bdynamic --dll-search-prefix=cyg --tsaware -o ../bin/mcxcl.exe /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib/crt0.o /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/crtbegin.o -LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64 -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0 -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/lib/../lib -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/lib -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../.. mcx_host.obj mcx_utils.obj tictoc.obj mcxcl.obj mcx_shapes.obj cjson/cJSON.obj -lOpenCL -lstdc++ -lgcc_s -lgcc -lcygwin -ladvapi32 -lshell32 -luser32 -lkernel32 -lgcc_s -lgcc /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib/default-manifest.o /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/crtend.o
/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib/libOpenCL.a when searching for -lOpenCL
COLLECT_GCC_OPTIONS='-v' '-LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64' '-o' '../bin/mcxcl.exe' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
fangq@zen:~/space/git/Project/github/mcxcl/src$ ldd ../bin/mcxcl
ntdll.dll => /cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffcf9310000)
KERNEL32.DLL => /cygdrive/c/WINDOWS/System32/KERNEL32.DLL (0x7ffcf6d90000)
KERNELBASE.dll => /cygdrive/c/WINDOWS/System32/KERNELBASE.dll (0x7ffcf58b0000)
cygwin1.dll => /cygdrive/d/Users/fangq/Gitroot/Project/github/mcxcl/bin/cygwin1.dll (0x180040000)
OpenCL.dll => /cygdrive/c/WINDOWS/SYSTEM32/OpenCL.dll (0x7ffcb9ac0000)
ADVAPI32.dll => /cygdrive/c/WINDOWS/System32/ADVAPI32.dll (0x7ffcf9120000)
cygstdc++-6.dll => /usr/bin/cygstdc++-6.dll (0x3fbc30000)
fangq@zen:~/space/git/Project/github/mcxcl/src$ strace ../bin/mcxcl
--- Process 20212 created
--- Process 20212 loaded C:\Windows\System32\ntdll.dll at 00007ffcf9310000
--- Process 20212 loaded C:\Windows\System32\kernel32.dll at 00007ffcf6d90000
--- Process 20212 loaded C:\Windows\System32\KernelBase.dll at 00007ffcf58b0000
--- Process 20212 thread 16812 created
--- Process 20212 thread 15708 created
--- Process 20212 thread 19804 created
--- Process 20212 loaded D:\Users\fangq\Gitroot\Project\github\mcxcl\bin\cygwin1.dll at 0000000180040000
--- Process 20212 loaded C:\Windows\System32\OpenCL.dll at 00007ffcb9ac0000
--- Process 20212 loaded C:\Windows\System32\advapi32.dll at 00007ffcf9120000
--- Process 20212 loaded C:\cygwin64\bin\cygstdc++-6.dll at 00000003fbc30000
--- Process 20212 loaded C:\Windows\System32\msvcrt.dll at 00007ffcf6e80000
--- Process 20212 loaded C:\Windows\System32\sechost.dll at 00007ffcf7c80000
--- Process 20212 loaded C:\Windows\System32\rpcrt4.dll at 00007ffcf67e0000
--- Process 20212 loaded C:\cygwin64\bin\cyggcc_s-seh-1.dll at 00000003feec0000
--- Process 20212 loaded C:\Windows\System32\cfgmgr32.dll at 00007ffcf6020000
--- Process 20212 loaded C:\Windows\System32\ucrtbase.dll at 00007ffcf5ca0000
--- Process 20212 loaded C:\Windows\System32\ole32.dll at 00007ffcf7230000
--- Process 20212 loaded C:\Windows\System32\combase.dll at 00007ffcf6f20000
--- Process 20212 loaded C:\Windows\System32\bcryptprimitives.dll at 00007ffcf5c20000
--- Process 20212 loaded C:\Windows\System32\gdi32.dll at 00007ffcf6e50000
--- Process 20212 loaded C:\Windows\System32\gdi32full.dll at 00007ffcf5710000
--- Process 20212 loaded C:\Windows\System32\msvcp_win.dll at 00007ffcf5b20000
--- Process 20212 loaded C:\Windows\System32\user32.dll at 00007ffcf7af0000
--- Process 20212 loaded C:\Windows\System32\win32u.dll at 00007ffcf6070000
--- Process 20212, exception c0000139 at 00007ffcf9312b10
--- Process 20212 thread 16812 exited with status 0xc0000139
--- Process 20212 thread 19804 exited with status 0xc0000139
--- Process 20212 thread 15708 exited with status 0xc0000139
--- Process 20212 exited with status 0xc0000139
但是,如果我直接用"C:\Windows\System32\OpenCL.dll"替换-lOpenCL,即
g++ *.obj "C:\Windows\System32\OpenCL.dll" -static -o ../bin/mcxcl
现在生成的文件有更多使用 ldd 的 dll,并且 运行s 正确。
当直接 link 和 "C:\Windows\System32\OpenCL.dll"
时记录
fangq@zen:~/space/git/Project/github/mcxcl/src$ g++ -v mcx_host.obj mcx_utils.obj tictoc.obj mcxcl.obj mcx_shapes.obj cjson/cJSON.obj -L"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0"/lib/x64 "C:\Windows\System32\OpenCL.dll" -static -o ../bin/mcxcl
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/lto-wrapper.exe
Target: x86_64-pc-cygwin
...
Thread model: posix
gcc version 9.3.0 (GCC)
COMPILER_PATH=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/:/usr/lib/gcc/x86_64-pc-cygwin/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/:/usr/lib/gcc/x86_64-pc-cygwin/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/bin/
LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/lib/../lib/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/lib/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64' '-static' '-o' '../bin/mcxcl.exe' '-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/collect2.exe -plugin /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/cyglto_plugin.dll -plugin-opt=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/lto-wrapper.exe -plugin-opt=-fresolution=/tmp/ccVd88qq.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lcygwin -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh --build-id -m i386pep --wrap _Znwm --wrap _Znam --wrap _ZdlPv --wrap _ZdaPv --wrap _ZnwmRKSt9nothrow_t --wrap _ZnamRKSt9nothrow_t --wrap _ZdlPvRKSt9nothrow_t --wrap _ZdaPvRKSt9nothrow_t -Bstatic --dll-search-prefix=cyg --tsaware -o ../bin/mcxcl.exe /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib/crt0.o /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/crtbegin.o -LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64 -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0 -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/lib/../lib -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/lib -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../.. mcx_host.obj mcx_utils.obj tictoc.obj mcxcl.obj mcx_shapes.obj cjson/cJSON.obj C:\Windows\System32\OpenCL.dll -lstdc++ -lgcc -lgcc_eh -lcygwin -ladvapi32 -lshell32 -luser32 -lkernel32 -lgcc -lgcc_eh /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib/default-manifest.o /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/crtend.o
COLLECT_GCC_OPTIONS='-v' '-LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64' '-static' '-o' '../bin/mcxcl.exe' '-mtune=generic' '-march=x86-64'
fangq@zen:~/space/git/Project/github/mcxcl/src$ ldd ../bin/mcxcl
ntdll.dll => /cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffcf9310000)
KERNEL32.DLL => /cygdrive/c/WINDOWS/System32/KERNEL32.DLL (0x7ffcf6d90000)
KERNELBASE.dll => /cygdrive/c/WINDOWS/System32/KERNELBASE.dll (0x7ffcf58b0000)
cygwin1.dll => /cygdrive/d/Users/fangq/Gitroot/Project/github/mcxcl/bin/cygwin1.dll (0x180040000)
OpenCL.dll => /cygdrive/c/WINDOWS/SYSTEM32/OpenCL.dll (0x7ffcb9e60000)
ADVAPI32.dll => /cygdrive/c/WINDOWS/System32/ADVAPI32.dll (0x7ffcf9120000)
msvcrt.dll => /cygdrive/c/WINDOWS/System32/msvcrt.dll (0x7ffcf6e80000)
sechost.dll => /cygdrive/c/WINDOWS/System32/sechost.dll (0x7ffcf7c80000)
RPCRT4.dll => /cygdrive/c/WINDOWS/System32/RPCRT4.dll (0x7ffcf67e0000)
CFGMGR32.dll => /cygdrive/c/WINDOWS/System32/CFGMGR32.dll (0x7ffcf6020000)
ucrtbase.dll => /cygdrive/c/WINDOWS/System32/ucrtbase.dll (0x7ffcf5ca0000)
ole32.dll => /cygdrive/c/WINDOWS/System32/ole32.dll (0x7ffcf7230000)
combase.dll => /cygdrive/c/WINDOWS/System32/combase.dll (0x7ffcf6f20000)
bcryptPrimitives.dll => /cygdrive/c/WINDOWS/System32/bcryptPrimitives.dll (0x7ffcf5c20000)
GDI32.dll => /cygdrive/c/WINDOWS/System32/GDI32.dll (0x7ffcf6e50000)
gdi32full.dll => /cygdrive/c/WINDOWS/System32/gdi32full.dll (0x7ffcf5710000)
msvcp_win.dll => /cygdrive/c/WINDOWS/System32/msvcp_win.dll (0x7ffcf5b20000)
USER32.dll => /cygdrive/c/WINDOWS/System32/USER32.dll (0x7ffcf7af0000)
win32u.dll => /cygdrive/c/WINDOWS/System32/win32u.dll (0x7ffcf6070000)
fangq@zen:~/space/git/Project/github/mcxcl/src$ ../bin/mcxcl
==============================================================================
= Monte Carlo eXtreme (MCX) -- OpenCL =
...
我一直在使用 Cygwin64 gcc 在 Windows 上生成我的程序的夜间构建。不确定从什么时候开始,从 cygwin64(8.0 或 9.x)上的 gcc 创建的 exe 在 运行ning 时静默退出。使用strace,错误显示为
"The procedure entry point could not be located in the dynamic link library"
要重现此问题,您可以 运行 在 cygwin64 终端中执行以下命令
git clone https://github.com/fangq/mcxcl.git
cd mcxcl/src
make clean
make
../bin/mcxcl
由于my other question中描述的原因,我只能使用cygwin gcc (x86_64-pc-cygwin-gcc.exe
/x86_64-pc-cygwin-g++.exe
)编译它,而不能使用mingw64 gcc。该代码需要 OpenCL.dll(通常随图形驱动程序一起提供,位于 C:\Windows\System32\
)
然而,即使编译也没有给出任何错误,一旦生成二进制文件../bin/mcxcl
,运行立即returns 将其returns 没有任何消息。 运行 strace ../bin/mcxcl
打印上面的入口点错误。
运行 在 MSYS2 中使用 gcc 包(不是 mingw64-gcc!)的相同命令,输出可执行文件很好。 MSYS2 和 Cygwin64 中的 gcc 版本相同 (9.3)。
有人能告诉我这两种环境之间有什么不同吗?如果可以的话,怎么打工?实际上,它曾经有效。但是在最近的一些 cygwin 升级后坏了。
原来问题是由 link 使用 OpenCL.dll
文件引起的。
这是在 Cygwin
中使用 OpenCL.dll link 的默认且不正确的方法g++ *.obj -lOpenCL -static -o ../bin/mcxcl
即使 C:\Windows\System32\OpenCL.dll
被 ldd
列出,二进制文件也没有 运行 正确(见下面的日志)。很奇怪,即使系统上没有libOpenCL,g++仍然毫无怨言地输出一个二进制文件。
记录 OpenCL.dll 被错误地 link 编辑
fangq@zen:~/space/git/Project/github/mcxcl/src$ g++ -v mcx_host.obj mcx_utils.obj tictoc.obj mcxcl.obj mcx_shapes.obj cjson/cJSON.obj -L"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0"/lib/x64 -lOpenCL -o ../bin/mcxcl
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/lto-wrapper.exe
Target: x86_64-pc-cygwin
...
Thread model: posix
gcc version 9.3.0 (GCC)
COMPILER_PATH=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/:/usr/lib/gcc/x86_64-pc-cygwin/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/:/usr/lib/gcc/x86_64-pc-cygwin/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/bin/
LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/lib/../lib/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/lib/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64' '-o' '../bin/mcxcl.exe' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/collect2.exe -plugin /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/cyglto_plugin.dll -plugin-opt=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/lto-wrapper.exe -plugin-opt=-fresolution=/tmp/ccfQi5vc.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lcygwin -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id -m i386pep --wrap _Znwm --wrap _Znam --wrap _ZdlPv --wrap _ZdaPv --wrap _ZnwmRKSt9nothrow_t --wrap _ZnamRKSt9nothrow_t --wrap _ZdlPvRKSt9nothrow_t --wrap _ZdaPvRKSt9nothrow_t -Bdynamic --dll-search-prefix=cyg --tsaware -o ../bin/mcxcl.exe /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib/crt0.o /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/crtbegin.o -LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64 -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0 -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/lib/../lib -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/lib -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../.. mcx_host.obj mcx_utils.obj tictoc.obj mcxcl.obj mcx_shapes.obj cjson/cJSON.obj -lOpenCL -lstdc++ -lgcc_s -lgcc -lcygwin -ladvapi32 -lshell32 -luser32 -lkernel32 -lgcc_s -lgcc /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib/default-manifest.o /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/crtend.o
/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib/libOpenCL.a when searching for -lOpenCL
COLLECT_GCC_OPTIONS='-v' '-LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64' '-o' '../bin/mcxcl.exe' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
fangq@zen:~/space/git/Project/github/mcxcl/src$ ldd ../bin/mcxcl
ntdll.dll => /cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffcf9310000)
KERNEL32.DLL => /cygdrive/c/WINDOWS/System32/KERNEL32.DLL (0x7ffcf6d90000)
KERNELBASE.dll => /cygdrive/c/WINDOWS/System32/KERNELBASE.dll (0x7ffcf58b0000)
cygwin1.dll => /cygdrive/d/Users/fangq/Gitroot/Project/github/mcxcl/bin/cygwin1.dll (0x180040000)
OpenCL.dll => /cygdrive/c/WINDOWS/SYSTEM32/OpenCL.dll (0x7ffcb9ac0000)
ADVAPI32.dll => /cygdrive/c/WINDOWS/System32/ADVAPI32.dll (0x7ffcf9120000)
cygstdc++-6.dll => /usr/bin/cygstdc++-6.dll (0x3fbc30000)
fangq@zen:~/space/git/Project/github/mcxcl/src$ strace ../bin/mcxcl
--- Process 20212 created
--- Process 20212 loaded C:\Windows\System32\ntdll.dll at 00007ffcf9310000
--- Process 20212 loaded C:\Windows\System32\kernel32.dll at 00007ffcf6d90000
--- Process 20212 loaded C:\Windows\System32\KernelBase.dll at 00007ffcf58b0000
--- Process 20212 thread 16812 created
--- Process 20212 thread 15708 created
--- Process 20212 thread 19804 created
--- Process 20212 loaded D:\Users\fangq\Gitroot\Project\github\mcxcl\bin\cygwin1.dll at 0000000180040000
--- Process 20212 loaded C:\Windows\System32\OpenCL.dll at 00007ffcb9ac0000
--- Process 20212 loaded C:\Windows\System32\advapi32.dll at 00007ffcf9120000
--- Process 20212 loaded C:\cygwin64\bin\cygstdc++-6.dll at 00000003fbc30000
--- Process 20212 loaded C:\Windows\System32\msvcrt.dll at 00007ffcf6e80000
--- Process 20212 loaded C:\Windows\System32\sechost.dll at 00007ffcf7c80000
--- Process 20212 loaded C:\Windows\System32\rpcrt4.dll at 00007ffcf67e0000
--- Process 20212 loaded C:\cygwin64\bin\cyggcc_s-seh-1.dll at 00000003feec0000
--- Process 20212 loaded C:\Windows\System32\cfgmgr32.dll at 00007ffcf6020000
--- Process 20212 loaded C:\Windows\System32\ucrtbase.dll at 00007ffcf5ca0000
--- Process 20212 loaded C:\Windows\System32\ole32.dll at 00007ffcf7230000
--- Process 20212 loaded C:\Windows\System32\combase.dll at 00007ffcf6f20000
--- Process 20212 loaded C:\Windows\System32\bcryptprimitives.dll at 00007ffcf5c20000
--- Process 20212 loaded C:\Windows\System32\gdi32.dll at 00007ffcf6e50000
--- Process 20212 loaded C:\Windows\System32\gdi32full.dll at 00007ffcf5710000
--- Process 20212 loaded C:\Windows\System32\msvcp_win.dll at 00007ffcf5b20000
--- Process 20212 loaded C:\Windows\System32\user32.dll at 00007ffcf7af0000
--- Process 20212 loaded C:\Windows\System32\win32u.dll at 00007ffcf6070000
--- Process 20212, exception c0000139 at 00007ffcf9312b10
--- Process 20212 thread 16812 exited with status 0xc0000139
--- Process 20212 thread 19804 exited with status 0xc0000139
--- Process 20212 thread 15708 exited with status 0xc0000139
--- Process 20212 exited with status 0xc0000139
但是,如果我直接用"C:\Windows\System32\OpenCL.dll"替换-lOpenCL,即
g++ *.obj "C:\Windows\System32\OpenCL.dll" -static -o ../bin/mcxcl
现在生成的文件有更多使用 ldd 的 dll,并且 运行s 正确。
当直接 link 和 "C:\Windows\System32\OpenCL.dll"
时记录fangq@zen:~/space/git/Project/github/mcxcl/src$ g++ -v mcx_host.obj mcx_utils.obj tictoc.obj mcxcl.obj mcx_shapes.obj cjson/cJSON.obj -L"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0"/lib/x64 "C:\Windows\System32\OpenCL.dll" -static -o ../bin/mcxcl
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/lto-wrapper.exe
Target: x86_64-pc-cygwin
...
Thread model: posix
gcc version 9.3.0 (GCC)
COMPILER_PATH=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/:/usr/lib/gcc/x86_64-pc-cygwin/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/:/usr/lib/gcc/x86_64-pc-cygwin/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/bin/
LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/lib/../lib/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/lib/:/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64' '-static' '-o' '../bin/mcxcl.exe' '-mtune=generic' '-march=x86-64'
/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/collect2.exe -plugin /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/cyglto_plugin.dll -plugin-opt=/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/lto-wrapper.exe -plugin-opt=-fresolution=/tmp/ccVd88qq.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh -plugin-opt=-pass-through=-lcygwin -plugin-opt=-pass-through=-ladvapi32 -plugin-opt=-pass-through=-lshell32 -plugin-opt=-pass-through=-luser32 -plugin-opt=-pass-through=-lkernel32 -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_eh --build-id -m i386pep --wrap _Znwm --wrap _Znam --wrap _ZdlPv --wrap _ZdaPv --wrap _ZnwmRKSt9nothrow_t --wrap _ZnamRKSt9nothrow_t --wrap _ZdlPvRKSt9nothrow_t --wrap _ZdaPvRKSt9nothrow_t -Bstatic --dll-search-prefix=cyg --tsaware -o ../bin/mcxcl.exe /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib/crt0.o /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/crtbegin.o -LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64 -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0 -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/lib/../lib -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib -L/lib/../lib -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/lib -L/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../.. mcx_host.obj mcx_utils.obj tictoc.obj mcxcl.obj mcx_shapes.obj cjson/cJSON.obj C:\Windows\System32\OpenCL.dll -lstdc++ -lgcc -lgcc_eh -lcygwin -ladvapi32 -lshell32 -luser32 -lkernel32 -lgcc -lgcc_eh /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../lib/default-manifest.o /usr/lib/gcc/x86_64-pc-cygwin/9.3.0/crtend.o
COLLECT_GCC_OPTIONS='-v' '-LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64' '-static' '-o' '../bin/mcxcl.exe' '-mtune=generic' '-march=x86-64'
fangq@zen:~/space/git/Project/github/mcxcl/src$ ldd ../bin/mcxcl
ntdll.dll => /cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll (0x7ffcf9310000)
KERNEL32.DLL => /cygdrive/c/WINDOWS/System32/KERNEL32.DLL (0x7ffcf6d90000)
KERNELBASE.dll => /cygdrive/c/WINDOWS/System32/KERNELBASE.dll (0x7ffcf58b0000)
cygwin1.dll => /cygdrive/d/Users/fangq/Gitroot/Project/github/mcxcl/bin/cygwin1.dll (0x180040000)
OpenCL.dll => /cygdrive/c/WINDOWS/SYSTEM32/OpenCL.dll (0x7ffcb9e60000)
ADVAPI32.dll => /cygdrive/c/WINDOWS/System32/ADVAPI32.dll (0x7ffcf9120000)
msvcrt.dll => /cygdrive/c/WINDOWS/System32/msvcrt.dll (0x7ffcf6e80000)
sechost.dll => /cygdrive/c/WINDOWS/System32/sechost.dll (0x7ffcf7c80000)
RPCRT4.dll => /cygdrive/c/WINDOWS/System32/RPCRT4.dll (0x7ffcf67e0000)
CFGMGR32.dll => /cygdrive/c/WINDOWS/System32/CFGMGR32.dll (0x7ffcf6020000)
ucrtbase.dll => /cygdrive/c/WINDOWS/System32/ucrtbase.dll (0x7ffcf5ca0000)
ole32.dll => /cygdrive/c/WINDOWS/System32/ole32.dll (0x7ffcf7230000)
combase.dll => /cygdrive/c/WINDOWS/System32/combase.dll (0x7ffcf6f20000)
bcryptPrimitives.dll => /cygdrive/c/WINDOWS/System32/bcryptPrimitives.dll (0x7ffcf5c20000)
GDI32.dll => /cygdrive/c/WINDOWS/System32/GDI32.dll (0x7ffcf6e50000)
gdi32full.dll => /cygdrive/c/WINDOWS/System32/gdi32full.dll (0x7ffcf5710000)
msvcp_win.dll => /cygdrive/c/WINDOWS/System32/msvcp_win.dll (0x7ffcf5b20000)
USER32.dll => /cygdrive/c/WINDOWS/System32/USER32.dll (0x7ffcf7af0000)
win32u.dll => /cygdrive/c/WINDOWS/System32/win32u.dll (0x7ffcf6070000)
fangq@zen:~/space/git/Project/github/mcxcl/src$ ../bin/mcxcl
==============================================================================
= Monte Carlo eXtreme (MCX) -- OpenCL =
...