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++应用程序(使用共享库中的类)
  • 建库
  • 构建应用程序(此处您将捕获链接错误)
这是我的档案:

SharedLibTest.h

#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