Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误:导出序号太大:104116_C++_Cmake_Mingw_Inkscape_Ninja - Fatal编程技术网

C++ 错误:导出序号太大:104116

C++ 错误:导出序号太大:104116,c++,cmake,mingw,inkscape,ninja,C++,Cmake,Mingw,Inkscape,Ninja,我使用以下源代码构建Inkscape: $ cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug .. $ ninja install 它返回的错误如下 [1002/1006] Building CXX object src/CMakeFiles/inkscape_base.dir/verbs.cpp.obj [1003/1006] Linking CXX shared library bin\libinkscape_base.dll FAILED: bin/libi

我使用以下源代码构建Inkscape:

$ cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug ..
$ ninja install
它返回的错误如下

[1002/1006] Building CXX object src/CMakeFiles/inkscape_base.dir/verbs.cpp.obj
[1003/1006] Linking CXX shared library bin\libinkscape_base.dll
FAILED: bin/libinkscape_base.dll src/libinkscape_base.dll.a
cmd.exe /C "cd . && C:\msys64\mingw64\bin\g++.exe  -fopenmp -m64 -mms-bitfields -mthreads -mwindows -pthread -std=c++11 -g   -shared -o bin\libinkscape_base.dll -Wl,--out-implib,src\libinkscape_base.dll.a -Wl,--major-image-version,0,--minor-image-version,0 @CMakeFiles/inkscape_base.rsp  && cd ."
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/7.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: Error: export ordinal too large: 104116
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
什么会导致此错误以及如何解决


注意:我可以在不使用
-DCMAKE\u build\u TYPE=Debug的情况下成功构建Inkscape
编译DLL的符号太多,但我已使用以下命令成功地使用构建样式“Debug”和静态链接编译Inkscape:

cmake -DCMAKE_BUILD_TYPE=Debug -DBUILD_SHARED_LIBS=OFF -G Ninja ..
ninja install

我试图用谷歌搜索这个错误的具体信息,但在第一次点击中找不到任何合适的信息(除了这个问题)。因此,我至少知道/发现:Windows DLL中导出的符号可以通过名称或序号进行标识。听起来你的构建不知怎么被破坏了:破坏了.def文件?是否尝试按名称导出符号?可能是的,这就是它在调试中工作的原因(其中名称可能是默认名称)。如何按名称导出符号?IMHO,这不是CMake的问题。如何导出符号是源代码中定义的一部分。(可能有专门用于MS编译器的文件。)一个选项是提供额外的.def文件。另一种选择是在C++源代码中使用MS特定扩展。如果我没记错的话,也可以使用.def文件按名称导出。(我有时在GTK+源代码中看到它,但同时忘记了细节。)似乎至少对于这个工具链,它认为序号是一个无符号16位整数(范围0-65535),因此提供给它的序号超出了范围。我在文档中找不到指定序号有效范围的任何内容,但文档确认索引是16位整数。