Usando comandos - (arquivos -) gcc

Oct 10 2020

Ao compilar uma DLL, encontrei muitos undefined referenceerros, que acho que podem ser causados ​​por dependências circulares entre as bibliotecas. Para corrigir isso, eu tenho tentado usar os -(arquivos -)e --start-grouparquivos --end-groupopções:

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 -)

Fazer isso resulta no erro gcc: error: unrecognized cpmmand line option '-('e novamente na opção de fechamento. Tenho o mesmo problema ao usar as opções de grupo de início e fim. Estou executando no Windows 10 usando o compilador MinGW gcc.

Estou usando no lugar errado ou há um problema na minha configuração?

Respostas

AsteroidsWithWings Oct 09 2020 at 23:50

--start-groupe--end-group (e as formas curtas, -(e -)) são opções de vinculador .

Você precisará -Wlusá-los a partir do driver do compilador gcc, de modo que ele os transmita ao vinculador, em vez de tentar entendê-los por si mesmo (o que não é possível, porque não possui essas opções).

Então:

-Wl,--start-group
-Wl,--end-group
-Wl,-(
-Wl,-)

Estão bem.

Mas estes:

--start-group
--end-group
-(
-)

não são.

A propósito, você provavelmente g++não quer , a gccmenos que esteja deliberadamente ignorando a biblioteca padrão C ++ (e outros tempos de execução relevantes) de sua construção.