1
如果我有一個將被編譯爲共享對象的類。 該類在.h文件中聲明並在.cpp文件中實現。內嵌方法不可用作共享庫的符號
這個類包含幾個內聯方法。
如果我寫了一些程序與此共享庫鏈接的,包括.h文件, 我會鏈接時,它得到未定義參考錯誤。
這是因爲沒有爲內聯方法導出的符號?
我能理解這個嗎?
UPDATE:一些示例代碼下面
somelib.h
#ifndef __ABC_LIB_H
#define __ABC_LIB_H
#include <iostream>
class ABC {
ABC();
~ABC();
inline void not_callable_outside_library();
void callable_outside_library();
};
#endif
somelib.cpp
#include "somelib.h"
ABC::ABC() {}
ABC::~ABC() {}
void ABC::not_callable_outside_library(){ std::cout<<"not_callable_outside_library"<<std::endl; }
void ABC::callable_outside_library(){ std::cout<<"callable_outside_library"<<std::endl; }
program.cpp
#include "somelib.h"
int main() {
ABC x;
x.not_callable_outside_library();
return 0;
};
將somelib.cpp編譯爲共享庫(.so對象)並將其鏈接到program.cpp,然後獲取名爲程序的二進制文件。
現在你應該得到一個未定義的參考鏈接時。
應該不需要任何內聯方法的符號。向我們展示一些代碼和錯誤。 – 2012-08-06 03:55:02
你是正確的,內聯函數不提供鏈接的外部定義。至於你的錯誤,你應該構造你的類定義,以便你不直接依賴於共享對象之外的內聯函數。 – chrisaycock 2012-08-06 04:00:12
LuchianGrigore見上面; @chrisaycock感謝您的確認。豎起大拇指 ! – average 2012-08-06 04:11:35