Tôi đang thực hiện một C++ Thư viện chia sẻ và khi tôi biên soạn một exe chính có sử dụng thư viện trình biên dịch mang lại cho tôi:C++ thư viện chia sẻ không xác định tài liệu tham khảo cho `FooClass :: SayHello()'
main.cpp:(.text+0x21): undefined reference to `FooClass::SayHello()'
collect2: ld returned 1 exit status
Thư viện đang :
fooclass.h
#ifndef __FOOCLASS_H__
#define __FOOCLASS_H__
class FooClass
{
public:
char* SayHello();
};
#endif //__FOOCLASS_H__
fooclass.cpp
#include "fooclass.h"
char* FooClass::SayHello()
{
return "Hello Im a Linux Shared Library";
}
Biên soạn với:
g++ -shared -fPIC fooclass.cpp -o libfoo.so
chính: main.cpp
#include "fooclass.h"
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
FooClass * fooClass = new FooClass();
cout<< fooClass->SayHello() << endl;
return 0;
}
Biên soạn với:
g++ -I. -L. -lfoo main.cpp -o main
Chiếc máy là một Ubuntu Linux 12
Cảm ơn!
Thư viện ở cuối lệnh trình biên dịch. Xem http://stackoverflow.com/questions/9966959/noobish-linker-errors-when-compiling-against-glib/9966989#9966989 – hmjd
Không viết các nhân viên bảo vệ (hoặc bất kỳ tên nào khác) có chứa hai dấu gạch dưới hoặc bắt đầu bằng dấu gạch dưới theo sau là một chữ cái viết hoa. Những tên này được dành riêng cho việc triển khai. (Điều này có lẽ không liên quan đến câu trả lời đúng cho câu hỏi) –
@close cử tri: Tôi nghĩ câu hỏi này hay hơn câu hỏi khác (trước hết, tiêu đề không mang tính mô tả, và thứ hai, cái kia có một tấn rác không liên quan) – Wug