Đây là một vấn đề đáng ngại. Tôi biết chuyện gì đang diễn ra nhưng không phải vì sao. Tôi nhận được một lỗi "tham chiếu không xác định" có nghĩa là trình liên kết (ld) không đặt mã từ thư viện mà tôi đã tạo.Các vấn đề với thư viện ld và tĩnh "tham chiếu không xác định"
Tôi hiện đang lừa xung quanh với Zed A. Shaw "Learn C the Hard Way" khóa học. Tôi đang cố gắng hoàn thành bài tập 32, nhưng tôi vẫn gặp lỗi tương tự.
Trong cuốn sách mà bạn phát triển một làm cho tập tin đó chạy lệnh sau:
cc -g -O2 -Wall -Wextra -Isrc -rdynamic -DNDEBUG build/liblcthw.a \
tests/list_tests.c -o tests/list_tests
nơi -g là cho phép thông tin gỡ lỗi, Wall là cho phép "tất cả" cảnh báo, -Wextra là cho phép nhiều cảnh báo, -Isrc để bao gồm thư mục src vào thư mục thư viện, -o tests/list_tests là tạo ra một đầu ra với tên đó trong thư mục đó, -DNDEBUG để kích hoạt một biến từ mã, -O2 để tối ưu hóa mức 2 (điều đó có nghĩa là) và xây dựng/liblcthw.a để bao gồm thư viện đó (thư viện đang xây dựng). Phần còn lại tôi không biết họ làm gì.
Nếu tôi nhận được đúng, có một list.c trong thư mục src tạo danh sách đối tượng.o. Đối tượng này sau đó bao gồm trong lib thông qua ar và ranlib. Vì vậy, gọi danh sách header.h nên làm cho ld tìm trong build/liblcthw.a cho list.o. Vấn đề là ld không đọc build/liblcthw.a vì một số lý do. Vì vậy, tôi nhận được tham chiếu không xác định này để lỗi.
Tôi đã cố gắng liên hệ với Zed nhưng anh ấy là một người đàn ông bận rộn. Vì vậy, tôi hy vọng sẽ nhận được sự giúp đỡ ở đây. Cho tôi biết nếu tôi cần thêm thông tin khác về vấn đề này. Here's liên kết tới toàn bộ thư viện cho đến nay.
Tôi hy vọng ai đó có thể giúp tôi.
Đặt hàng vấn đề. Các thư viện tĩnh đi * sau * các tệp nguồn/đối tượng trong dòng lệnh. –
Tôi không nhận được đề xuất của bạn –
Thay đổi thứ tự của các đối số dòng lệnh. Tệp .c phải đi trước và tệp .a phải đi sau đó. –