c++ - 使用-(存档-)gcc命令

标签 c++ gcc

在编译DLL时,我遇到了许多undefined reference错误,我认为这可能是由于库之间的循环依赖关系引起的。为了解决这个问题,我一直在尝试使用-(文件-)--start-group文件--end-group选项:gcc -Wall -shared Pipeline.cpp -I"C:/Python38/include" -I"C:/Program Files/Pleora Technologies Inc/eBUS SDK/Includes" -I "C:/Python38/Lib/site-packages/numpy/core/include" -L"C:\Users\fmkz78\AppData\Local\Continuum\anaconda3\libs" -L"C:/Program Files/Pleora Technologies Inc/eBUS SDK/Libraries" -o lib.dll -( -lEbInstallerLib64 -lEbTransportLayerLib64 -lEbUtilsLib64 -lPtConvertersLib64 -lPtUtilsLib64 -lPvAppUtils64 -lPvBase64 -lPvBuffer64 -lPvCameraBridge64 -lPvDevice64 -lPvDSSource64 -lPvGenICam64 -lPvGUI64_VC10 -lPvGUI64_VC11 -lPvGUI64_VC12 -lPvGUI64_VC14 -lPvPersistence64 -lPvSerial64 -lPvStream64 -lPvSystem64 -lPvTransmitter64 -lPvVirtualDevice64 -lSimpleImagingLib64 -lpython37 -)这样做会导致gcc: error: unrecognized cpmmand line option '-('错误,并再次导致关闭选项错误。我使用开始和结束组选项遇到相同的问题。我正在使用MinGW gcc编译器在Windows 10上运行。
我是在错误的地方使用它们,还是在安装过程中出现问题?

最佳答案

--start-group and --end-group (缩写为-(-))是linker options
您需要-Wl才能从编译器驱动程序gcc中使用它们,以便它将它们传递给链接器,而不是试图自己理解它们(它不能,因为它没有任何此类开关)。
所以:

-Wl,--start-group
-Wl,--end-group
-Wl,-(
-Wl,-)
没事。
但是这些:
--start-group
--end-group
-(
-)
不是。
顺便说一句,除非您故意从构建中跳过C++标准库(以及其他相关的运行时),否则您可能需要g++而不是gcc

关于c++ - 使用-(存档-)gcc命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64283934/

相关文章:

c++11随机数生成: how to re-implement `uniform_int_distribution` with `mt19937` without templates

c - printf 和 gcc -O 选项更改返回值

c++ - 在删除文件之前检查文件是否仍在被另一个进程使用(c、c++、linux)

c++ - 文件损坏检测和错误处理

c++ - 如何分隔 C++ 字符串中的数字和字母?

c - GCC SSA 格式变量的含义

c++ - Linux上的C++插件ABI问题

c++ - 了解预处理器指令

c++ - EXPECT_NO_THROW语句的gtest捕获结果

count_if 算法中的 C++ 编译器错误