Tôi cần liên kết động thư viện mà tôi đã tạo. Tôi không chắc chắn vấn đề là gì. Tất cả đều biên dịch đúng, nhưng tôi luôn luôn bắt handle
như con trỏ NULL
:Thư viện libdl và thư viện được liên kết động thích hợp
void *handle;
char *error;
handle = dlopen ("./hw11-lib-michaelSchilling.so", RTLD_LAZY);
//same error comes up with full path as well as './hw11...'
if(!handle){
error = dlerror();
printf("%s\n", error);
printf("Error loading library.\n");
exit(1);
}
tôi không thể có được thông qua lỗi này và tôi không chắc chắn điều gì có thể là sai lầm. Tôi khá chắc chắn tôi đã biên dịch mọi thứ một cách chính xác. Dưới đây là các bước biên soạn tôi đã sử dụng:
gcc -rdynamic -c hw11-lib-michaelSchilling.c -o hw11-lib-michaelSchilling.so
gcc hw11-michaelSchilling-4.c -ldl -o hw11-michaelSchilling-4
Tôi nhận được một lỗi mà đọc
chỉ ET_DYN và ET_EXEC có thể được nạp.
Cùng với '-rdynamic'? Chỉ cần thử nó với cả hai và chỉ với '-shared', nhưng tôi đã nhận được lỗi tương tự. –
@MichaelSchilling: Tôi không nghĩ rằng '-rdynamic' có liên quan gì đến vấn đề này, vì vậy bạn có thể giữ nó trong trường hợp cần mã của bạn. – NPE
@MichaelSchilling: Bạn đã xóa '-c' chưa? – NPE