Utilizzo dei comandi - (archivi -) gcc

Oct 10 2020

Durante la compilazione di una DLL, ho riscontrato molti undefined referenceerrori, che penso possano essere causati da dipendenze circolari tra le librerie. Per risolvere questo problema, ho provato a utilizzare le opzioni di -(archivi -)e --start-grouparchivi --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 -)

In questo modo si verifica l'errore gcc: error: unrecognized cpmmand line option '-('e di nuovo per l'opzione di chiusura. Ottengo lo stesso problema utilizzando le opzioni di inizio e fine gruppo. Sto funzionando su Windows 10 usando il compilatore gcc MinGW.

Li sto usando nel posto sbagliato o c'è un problema nella mia configurazione?

Risposte

AsteroidsWithWings Oct 09 2020 at 23:50

--start-groupe--end-group (e le forme brevi, -(e -)) sono opzioni del linker .

Avrai bisogno -Wldi usarli dal driver del compilatore gcc, in modo che li passi al linker piuttosto che cercare di capirli da solo (cosa che non può, perché non ha tali interruttori).

Così:

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

stanno bene.

Ma questi:

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

non sono.

A proposito, probabilmente lo vorrai g++, no gcc, a meno che tu non stia saltando deliberatamente la libreria standard C ++ (e altri runtime rilevanti) dalla tua build.