linux – 无法将应用程序与mudflap链接
发布时间:2020-12-13 22:49:27 所属栏目:Linux 来源:网络整理
导读:我的应用程序使用我的共享库.必须对应用程序和库进行混淆,以检查超出堆栈和堆的读写区域.共享库已成功构建,但在链接应用程序时,我遇到了很多错误. 我做了一个简单的例子来重现这个问题.以下是重现的步骤: 使用2个文件创建C动态共享库项目:h和cpp文件包含一
我的应用程序使用我的共享库.必须对应用程序和库进行混淆,以检查超出堆栈和堆的读写区域.共享库已成功构建,但在链接应用程序时,我遇到了很多错误.
我做了一个简单的例子来重现这个问题.以下是重现的步骤: >使用2个文件创建C动态共享库项目:h和cpp文件包含一些类,在h或cpp文件中使用#include< iostream> 这是我的文件: SharedLibTest.h #ifndef SHAREDLIBTEST_H_ #define SHAREDLIBTEST_H_ #include <iostream> class SharedLibTest { public: void func(); }; #endif /* SHAREDLIBTEST_H_ */ SharedLibTest.cpp #include "SharedLibTest.h" void SharedLibTest::func() {} main.cpp中 #include <SharedLibTest.h> int main(int argc,char *argv[]) { SharedLibTest obj; obj.func(); return 0; } 建立图书馆: g++ -O0 -g3 -Wall -c -fmessage-length=0 -fmudflap -funwind-tables -fPIC -MMD -MP -MF"SharedLibTest.d" -MT"SharedLibTest.d" -o "SharedLibTest.o" "../SharedLibTest.cpp" g++ -rdynamic -shared -o "libshared_lib.so" ./SharedLibTest.o -lmudflap 构建应用程序: g++ -I"/home/msviridov/work/prj/workspace/shared_lib" -O0 -g3 -Wall -c -fmessage-length=0 -fmudflap -funwind-tables -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp" g++ -L"/home/msviridov/work/prj/workspace/shared_lib/Debug" -rdynamic -v -o "executable" ./main.o -lshared_lib -lmudflap 链接器错误输出是: /home/msviridov/work/prj/workspace/shared_lib/Debug/libshared_lib.so: undefined reference to `__gnu_cxx::__numeric_traits_integer<unsigned long>::__digits' /home/msviridov/work/prj/workspace/shared_lib/Debug/libshared_lib.so: undefined reference to `__gnu_cxx::__numeric_traits_integer<long>::__min' /home/msviridov/work/prj/workspace/shared_lib/Debug/libshared_lib.so: undefined reference to `__gnu_cxx::__numeric_traits_integer<short>::__min' /home/msviridov/work/prj/workspace/shared_lib/Debug/libshared_lib.so: undefined reference to `__gnu_cxx::__numeric_traits_integer<char>::__max' /home/msviridov/work/prj/workspace/shared_lib/Debug/libshared_lib.so: undefined reference to `__gnu_cxx::__numeric_traits_integer<short>::__max' /home/msviridov/work/prj/workspace/shared_lib/Debug/libshared_lib.so: undefined reference to `__gnu_cxx::__numeric_traits_integer<long>::__max' /home/msviridov/work/prj/workspace/shared_lib/Debug/libshared_lib.so: undefined reference to `__gnu_cxx::__numeric_traits_integer<int>::__max' /home/msviridov/work/prj/workspace/shared_lib/Debug/libshared_lib.so: undefined reference to `__gnu_cxx::__numeric_traits_integer<int>::__min' collect2: ld returned 1 exit status make: *** [executable] Error 1 但是,如果我删除了库的mudflap编译器和链接器标志,应用程序的构建将成功完成. 我不明白是什么导致了这样的结果. 解决方法
删除#include< iostream>来自你的头文件.如果要包含iostream,请在源(SharedLibTest.cpp)文件中执行此操作.
将它包含在头文件中也包含大量垃圾,也可能导致一些像这样的引用错误.创建没有包含的SharedLibTest.o并比较目标文件的大小. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |