HI,
我对c / linux(ubuntu)中的.h文件和.cpp文件有一些疑问.
>可以使用g编译.h文件,或者您可以编译包含.h文件的.cpp文件?
>从.h文件和它的.cpp文件(.cpp,其中我包含一些代码到我在.h文件中定义的方法)我使用命令创建一个.so文件:
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有这个未定义的错误,我不知道如何解决它.谢谢
编辑:
/usr/bin/ld: .usr/lib/debug/usr/lib/crt1.o relocation 0 has invalid symbol index 12 (same with index 13,2,14...22 ).
g++ test.coo -ldl -o test
用于test.cpp编译.
解决方法
>通常不需要编译.h文件,它只是生成一个扩展名为.gch的巨大文件.
>您获得的错误是链接时间.在创建.so文件时,实际上并不链接代码.因此,假定所有未定义的符号都出现在某个地方.链接它时,链接器将找到这些符号.因此,您应该将所有.cpp文件编译/链接在一起.错误将消失.
>您获得的错误是链接时间.在创建.so文件时,实际上并不链接代码.因此,假定所有未定义的符号都出现在某个地方.链接它时,链接器将找到这些符号.因此,您应该将所有.cpp文件编译/链接在一起.错误将消失.
此外,对于模板,代码的定义必须始终可见.因此,无论何处编写模板化函数/变量定义,都要在任何地方包含该文件.
template<typename T> class A { virtual void foo(int); // ok }; class A { template<typename T> virtual void foo(T); // illegal };
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。