C++ 为什么不使用共享库符号中定义的符号?
我有一个非常简单的共享库,有两个函数。hello1()在lib.cpp文件中定义,而hello2()在头文件(lib.hpp)中定义。hello1()和hello2()未声明为内联 然后我有一个测试程序,其中包括来自共享库的头文件和针对共享库的链接。test.cpp程序执行两个功能: #包括“xdaq_头/lib.h” 正如所料,当我在lib.cpp中更改hello1()定义并重新编译共享库时,这些更改在执行测试程序时可见 但是,如果我修改头中的hello2()定义并重新编译共享库,那么在测试程序执行期间,这些更改将不可见 只有在重新编译test.cpp之后,更改才可见 我的开发平台是:C++ 为什么不使用共享库符号中定义的符号?,c++,c,shared-libraries,inline,C++,C,Shared Libraries,Inline,我有一个非常简单的共享库,有两个函数。hello1()在lib.cpp文件中定义,而hello2()在头文件(lib.hpp)中定义。hello1()和hello2()未声明为内联 然后我有一个测试程序,其中包括来自共享库的头文件和针对共享库的链接。test.cpp程序执行两个功能: #包括“xdaq_头/lib.h” 正如所料,当我在lib.cpp中更改hello1()定义并重新编译共享库时,这些更改在执行测试程序时可见 但是,如果我修改头中的hello2()定义并重新编译共享库,那么在测试程
- Linux 2.6.18-348.12.1.el5 CEST 2013 x86_64 x86_64 x86_64 GNU/Linux
- 通用条款(gcc)4.1.2
- 在lib.hpp中添加_属性_uu((noinline))(仅限g++):
std::cout因为头中定义了
hello2
,您的测试程序将使用它而不是共享库的版本。因此,如果您修改头,您需要重新编译测试程序。如果您希望能够重新编译共享库,您需要移动定义(即代码)从头文件中取出hello2,并放入其他cpp文件中
int main() {
hello1();
hello2();
}
void hello2() __attribute__ ((noinline));
void hello2() {
asm("");
std::cout
#ifndef _mylib_lib_hpp_
#define _mylib_lib_hpp_
#include <iostream>
void hello1();
void hello2() {
std::cout << "hello2(): first implementation" << std::endl;
}
#endif
#include <iostream>
void hello1() {
std::cout << "hello1(): second implementation" << std::endl;
}