Linux Can';带挡泥板的t形连接应用
我的应用程序使用我的共享库。应用程序和库必须Linux Can';带挡泥板的t形连接应用,linux,gcc,linker,shared-libraries,undefined-reference,Linux,Gcc,Linker,Shared Libraries,Undefined Reference,我的应用程序使用我的共享库。应用程序和库必须mudflapped,以检查堆栈和堆上的越界读写。共享库已成功构建,但在链接应用程序时,我遇到了很多错误 我举了一个简单的例子,再现了这个问题。以下是复制的步骤: 用2个文件创建C++动态共享库项目:H和CPP文件,具有H类或CPP文件使用 >包含 < LI>创建使用此库的C++应用程序(使用共享库中的类) 建库 构建应用程序(此处您将捕获链接错误) 这是我的档案: SharedLibTest.h #ifndef SHAREDLIBTEST_H_
mudflapped
,以检查堆栈和堆上的越界读写。共享库已成功构建,但在链接应用程序时,我遇到了很多错误
我举了一个简单的例子,再现了这个问题。以下是复制的步骤:
- 用2个文件创建C++动态共享库项目:H和CPP文件,具有H类或CPP文件使用<代码> >包含 < LI>创建使用此库的C++应用程序(使用共享库中的类)
- 建库
- 构建应用程序(此处您将捕获链接错误)
#ifndef SHAREDLIBTEST_H_
#define SHAREDLIBTEST_H_
#include <iostream>
class SharedLibTest {
public:
void func();
};
#endif /* SHAREDLIBTEST_H_ */
main.cpp
#include <SharedLibTest.h>
int main(int argc, char *argv[])
{
SharedLibTest obj;
obj.func();
return 0;
}
构建应用程序:
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
/home/msviridov/work/prj/workspace/shared_lib/Debug/libshared_lib.so:未定义对“\uu gnu\u cxx::\uu数值特征\u整数::\uu数字”的引用
/home/msviridov/work/prj/workspace/shared_lib/Debug/libshared_lib.so:未定义对“\uu gnu\u cxx::\uu数值特征\u整数::\uu min”的引用
/home/msviridov/work/prj/workspace/shared_lib/Debug/libshared_lib.so:未定义对“\uu gnu\u cxx::\uu数值特征\u整数::\uu min”的引用
/home/msviridov/work/prj/workspace/shared_lib/Debug/libshared_lib.so:未定义对“\uu gnu\u cxx::\uu数值特征\u整数::\uu max”的引用
/home/msviridov/work/prj/workspace/shared_lib/Debug/libshared_lib.so:未定义对“\uu gnu\u cxx::\uu数值特征\u整数::\uu max”的引用
/home/msviridov/work/prj/workspace/shared_lib/Debug/libshared_lib.so:未定义对“\uu gnu\u cxx::\uu数值特征\u整数::\uu max”的引用
/home/msviridov/work/prj/workspace/shared_lib/Debug/libshared_lib.so:未定义对“\uu gnu\u cxx::\uu数值特征\u整数::\uu max”的引用
/home/msviridov/work/prj/workspace/shared_lib/Debug/libshared_lib.so:未定义对“\uu gnu\u cxx::\uu数值特征\u整数::\uu min”的引用
collect2:ld返回了1个退出状态
生成:**[可执行文件]错误1
不过,如果我删除库的mudflap编译器和链接器标志,应用程序的构建将成功完成。
但反之亦然
我不明白是什么导致了这样的结果。
我的平台是Linux Mint 13 Maya 64位。我将感谢任何帮助。谢谢。从头文件中删除#包括。如果您想在源文件(SharedLibTest.cpp)中包含iostream
将其包含在头文件中也会为您带来大量垃圾,并且可能会导致类似这样的引用错误。创建SharedLibTest.o,但不包括并比较对象文件的大小。您可能正在点击,但需要最新的4.8代码来检查。此外,请注意,mudflap是for的,因此您可能会发现假可能性(ala)和它
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