Utilizzo dei comandi - (archivi -) gcc
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
--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.