ave*_*age 1 c++ linker inline reference undefined
如果我有一个将被编译为共享对象的类.该类在.h文件中声明,并在.cpp文件中实现.
该类包含几个内联方法.
如果我编写一些与此共享库链接并包含.h文件的程序,则链接时会出现未定义的引用错误.
这是因为没有为内联方法导出符号吗?
我理解正确吗?
更新:下面的一些示例代码
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
Run Code Online (Sandbox Code Playgroud)
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; }
Run Code Online (Sandbox Code Playgroud)
program.cpp
#include "somelib.h"
int main() {
ABC x;
x.not_callable_outside_library();
return 0;
};
Run Code Online (Sandbox Code Playgroud)
将somelib.cpp编译为共享库(.so对象)并将其链接到program.cpp,然后获得名为program的二进制文件.
现在,您应该在链接时获得未定义的引用.
必须在头文件中定义内联函数.将您对以下内容进行对比:
somelib.h:
#ifndef ABC_LIB_H
#define ABC_LIB_H
#include <iostream>
class ABC {
ABC();
~ABC();
void not_callable_outside_library();
void callable_outside_library();
};
inline void ABC::not_callable_outside_library() {
std::cout << "not_callable_outside_library\n";
}
#endif
Run Code Online (Sandbox Code Playgroud)
somelib.cpp:
#include "somelib.h"
ABC::ABC() { }
ABC::~ABC() { }
void ABC::callable_outside_library() {
std::cout << "callable_outside_library\n";
}
Run Code Online (Sandbox Code Playgroud)
program.cpp:
#include "somelib.h"
int main() {
ABC x;
x.not_callable_outside_library();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
969 次 |
| 最近记录: |