Sử dụng lệnh - (archives -) gcc
Khi biên dịch một DLL, tôi đã gặp rất nhiều undefined referencelỗi, mà tôi nghĩ có thể do sự phụ thuộc vòng tròn giữa các thư viện. Để khắc phục điều này, tôi đã cố gắng để sử dụng -(tài liệu lưu trữ -)và --start-grouptài liệu lưu trữ --end-grouptùy chọn:
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 -)
Làm điều này dẫn đến lỗi gcc: error: unrecognized cpmmand line option '-('và một lần nữa cho tùy chọn đóng. Tôi gặp vấn đề tương tự khi sử dụng tùy chọn nhóm bắt đầu và kết thúc. Tôi đang chạy trên Windows 10 bằng trình biên dịch gcc MinGW.
Tôi đang sử dụng chúng không đúng chỗ hay có vấn đề gì trong quá trình thiết lập của tôi?
Trả lời
--start-groupvà--end-group (và các dạng rút gọn, -(và -)) là các tùy chọn trình liên kết .
Bạn sẽ cần -Wlsử dụng chúng từ trình điều khiển trình biên dịch gcc, để nó chuyển chúng đến trình liên kết thay vì cố gắng hiểu chính chúng (điều này không thể, vì nó không có bất kỳ công tắc nào như vậy).
Vì thế:
-Wl,--start-group
-Wl,--end-group
-Wl,-(
-Wl,-)
tốt thôi.
Nhưng những điều này:
--start-group
--end-group
-(
-)
không.
Nhân tiện, bạn có thể muốn g++, không gcc, trừ khi bạn đang cố tình bỏ qua thư viện chuẩn C ++ (và các thời gian chạy có liên quan khác) khỏi bản dựng của mình.