Tôi đã thử liên kết một thư viện tĩnh (được biên dịch với gcc) với một chương trình C++ và tôi nhận 'tham chiếu không xác định'. Tôi đã sử dụng gcc và g ++ phiên bản 4.6.3 trên máy chủ ubuntu 12.04. Ví dụ, đây là file thư viện đơn giản cho phương pháp thừa:Liên kết C thư viện tĩnh đã biên dịch với Chương trình C++
mylib.h
#ifndef __MYLIB_H_
#define __MYLIB_H_
int factorial(int n);
#endif
mylib.c
#include "mylib.h"
int factorial(int n)
{
return ((n>=1)?(n*factorial(n-1)):1);
}
Tôi tạo ra đối tượng cho mylib.c này sử dụng gcc:
gcc -o mylib.o -c mylib.c
Again thư viện tĩnh được tạo ra từ các tập tin đối tượng sử dụng tiện ích AR:
ar -cvq libfact.a mylib.o
Tôi đã thử nghiệm thư viện này với một chương trình C (test.c) và chương trình C++ (test.cpp)
Cả C và chương trình C++ có cơ thể giống nhau:
#include "mylib.h"
int main()
{
int fact = factorial(5);
return 0;
}
Giả sử thư viện libfact.a tĩnh có sẵn trong/home directory/kiểm tra, tôi biên soạn chương trình C của tôi mà không bất kỳ vấn đề:
gcc test.c -L/home/test -lfact
Tuy nhiên trong khi ++ chương trình thử nghiệm C, nó ném một lỗi liên kết:
g++ test.cpp -L/home/test -lfact
test.cpp:(.text+0x2f): undefined reference to `factorial(int)'
collect2: ld returned 1 exit status
Tôi thậm chí đã cố gắng thêm lệnh extern trong test.cpp:
extern int factorial(int n) //added just before the main() function
Vẫn còn những lỗi tương tự.
- Ai đó có thể cho tôi biết tôi sai ở đây không?
- Có bất kỳ điều gì tôi đã bỏ lỡ khi tạo thư viện tĩnh không?
- Tôi có phải thêm bất kỳ thứ gì vào số
test.cpp
để làm cho nó hoạt động không?
Khi tôi nhìn thấy các câu hỏi SO không có câu trả lời, cùng với câu trả lời được 7 bình chọn, tôi hoàn toàn hiểu được tính cách ngu xuẩn của con người. Làm thế nào câu trả lời có thể có liên quan nếu câu hỏi không? Nào! –