tiêu đề của câu hỏi này là exact dupe, nhưng câu trả lời trong câu hỏi đó không giúp tôi.Chuyển đổi Thư viện tĩnh thành Thư viện được chia sẻ (tạo libsome.so từ libsome.a): biểu tượng của tôi ở đâu?
tôi có một loạt các file đối tượng đóng gói trong một thư viện tĩnh:
% g++ -std=c++98 -fpic -g -O1 -c -o foo.o foo.cpp
% g++ -std=c++98 -fpic -g -O1 -c -o bar.o bar.cpp
% ar -rc libsome.a foo.o bar.o
Tôi muốn tạo libsome.so từ libsome.a thay vì các tập tin đối tượng, nhưng thư viện là thực sự barebones:
% g++ -std=c++98 -fpic -g -O1 -shared -o libsome.so libsome.a
% nm -DC libsome.so
0000xxxx A _DYNAMIC
0000xxxx A _GLOBAL_OFFSET_TABLE_
w _Jv_RegisterClasses
0000xxxx A __bss_start
w __cxa_finalize
0000xxxx A _edata
0000xxxx A _end
0000xxxx T _fini
0000xxxx T _init
thư viện tĩnh là ok, hoặc ít nhất tôi hoàn toàn có thể liên kết nó với tệp thực thi và chạy chức năng chứa. Ngoài ra, mọi thứ đều ổn nếu tôi tạo libsome.so từ foo.o và bar.o.
+1 Có bạn đi. Tôi đã thử "người đàn ông ld" và bỏ lỡ điều đó. –
cảm ơn, đây là nó! Tôi đã tìm kiếm manpage ld lên và xuống, nhưng bằng cách nào đó đã bỏ lỡ tùy chọn này. –
Bây giờ nếu chỉ có câu trả lời tuyệt vời này là cũng chỉ ra cách thiết lập điều này với một dự án CMake! Cảm ơn –