c未定义的引用
发布时间:2020-12-16 07:25:25 所属栏目:百科 来源:网络整理
导读:HI, 我对c / linux(ubuntu)中的.h文件和.cpp文件有一些疑问. 可以使用g编译.h文件,或者您可以编译包含.h文件的.cpp文件? 从.h文件和它的.cpp文件(.cpp,其中我包含一些代码到我在.h文件中定义的方法)我使用命令创建一个.so文件: g++-fPIC -shared my_code.c
HI,
我对c / linux(ubuntu)中的.h文件和.cpp文件有一些疑问. >可以使用g编译.h文件,或者您可以编译包含.h文件的.cpp文件? g++-fPIC -shared my_code.cpp -o my_code.so` 在test.cpp中我包含.h文件并使用dlopen我在.so文件上创建一个处理程序.为什么我有以下错误: undefined reference to bool `Class::method(std::string)` `collect2: ld returned 1 exit status >如果我在.h文件中说虚拟bool方法…编译test.cpp时没有错误.有人可以解释我做错了什么吗?问题是我有一个模板.使用模板我不能使用virtual..so..i有这个未定义的错误,我不知道如何解决它.谢谢 编辑: 当我编译my_code.cpp时,我有错误: /usr/bin/ld: .usr/lib/debug/usr/lib/crt1.o relocation 0 has invalid symbol index 12 (same with index 13,2,14...22 ). 但是当我创建.so文件时,没有错误.我用: g++ test.coo -ldl -o test 用于test.cpp编译. 解决方法
>通常不需要编译.h文件,它只是生成一个扩展名为.gch的巨大文件.
>您获得的错误是链接时间.在创建.so文件时,实际上并不链接代码.因此,假定所有未定义的符号都出现在某个地方.链接它时,链接器将找到这些符号.因此,您应该将所有.cpp文件编译/链接在一起.错误将消失. 此外,对于模板,代码的定义必须始终可见.因此,无论何处编写模板化函数/变量定义,都要在任何地方包含该文件. 编辑: template<typename T> class A { virtual void foo(int); // ok }; class A { template<typename T> virtual void foo(T); // illegal }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |