Tôi nhận được một số kết quả lạ khi cố gắng liên kết với thư viện bên ngoài. Nếu tôi chạy lệnh sau từ dòng lệnh:
gcc fftwTest.c -I../extlib/fftw-3.3.5-dll32 -L../extlib/fftw-3.3.5-dll32 -lfftw3-3 -lm -o kiểm tra
test.exe biên dịch, nhưng khi chạy nó, tôi nhận được thông báo lỗi cho biết chương trình không thể khởi động vì máy tính của tôi thiếu libfftw3-3.dll. Mặc dù trình liên kết đã tìm thấy nó tại thời điểm biên dịch.
Thay vào đó, nếu tôi đặt libfftw3-3.dll vào cùng thư mục với tệp fftwTest.c của tôi và thực hiện -L ở đó, nó sẽ biên dịch và chạy tốt. Vì vậy, tôi đoán điều này cho thấy rằng tôi đang làm sai điều gì đó với lệnh -L, nhưng khi liên kết và biên dịch, tôi không thể hiểu được điều gì.
Bất kỳ trợ giúp sẽ được đánh giá rất cao.
Cảm ơn!
Không có gì sai với lệnh liên kết của bạn, vâng, trình liên kết đã tìm thấy nó khi biên dịch vì bạn đã chỉ định đường dẫn đến nó, nhưng không thể nói điều tương tự khi chạy chương trình (trình liên kết không/không thể mã hóa cứng đường dẫn đến DLL, có thể là nằm ở nơi khác trên máy triển khai.
DLL phải nằm trên đường dẫn hệ thống hoặc trong cùng thư mục với tệp thực thi. Trong trường hợp của bạn, bạn có thể:
- Sao chép DLL trong thư mục .exe (mà bạn tự tìm thấy)
- Hoặc thêm phần này trước khi bắt đầu thực thi trong tệp bó:
đặt PATH=%PATH%;../extlib
(Hoặc sử dụng quản lý biến môi trường Windows để đặt đường dẫn tuyệt đối hoàn chỉnh trong đường dẫn hệ thống)
Khi phân phối gói cho bên thứ 3, tốt hơn là sao chép DLL trong thư mục thực thi để không cần cấu hình, tuy nhiên nếu bạn sử dụng/nâng cấp DLL nhiều lần và trên nhiều chương trình nhỏ thì giải pháp tốt nhất là máy phát triển của bạn là đặt nó ở một nơi và đặt hệ thống PATH để chạy nó (đó là sự đánh đổi)
Tôi là một lập trình viên xuất sắc, rất giỏi!