gpt4 book ai didi

linux - 无法将应用程序与 mudflap 链接

转载 作者:IT王子 更新时间:2023-10-29 01:27:27 25 4
gpt4 key购买 nike

我的应用程序使用我的共享库。应用程序和库必须是 mudflapped检查堆栈和堆上的越界读取和写入。共享库已成功构建,但在链接应用程序时我遇到了很多错误。

我做了一个简单的例子来重现这个问题。以下是重现步骤:

  • 使用 2 个文件创建 C++ 动态共享库项目:带有一些类的 h 和 cpp 文件,在 h 或 cpp 文件中使用 #include <iostream>
  • 创建使用此库的 C++ 应用程序(使用共享库中的类)
  • 建库
  • 构建应用程序(在这里你会发现一个链接错误)

这是我的文件:

SharedLibTest.h

#ifndef SHAREDLIBTEST_H_
#define SHAREDLIBTEST_H_

#include <iostream>

class SharedLibTest {
public:
void func();
};

#endif /* SHAREDLIBTEST_H_ */

共享库测试.cpp

#include "SharedLibTest.h"

void SharedLibTest::func()
{}

主要.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 编译器和链接器标志,应用程序的构建将成功完成。但反之则不然。

我不明白是什么导致了这样的结果。我的平台是 Linux Mint 13 Maya 64 位。我将不胜感激任何帮助。谢谢。

最佳答案

删除 #include <iostream>从你的头文件。如果你想包括 iostream在您的源文件 (SharedLibTest.cpp) 中执行此操作。

将它包含在头文件中也会给你带来很多垃圾,也可能会导致一些像这样的引用错误。创建不包含的 SharedLibTest.o 并比较目标文件的大小。

关于linux - 无法将应用程序与 mudflap 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12637898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com