gpt4 book ai didi

linker-errors - clang++ -stdlib = libc++导致 undefined reference

转载 作者:行者123 更新时间:2023-12-04 03:15:55 24 4
gpt4 key购买 nike

在clang与libc++一起使用时,为什么会出现以下链接器错误:

$ clang++ -stdlib=libc++  po.cxx -lpoppler
/tmp/po-QqlXGY.o: In function `main':
po.cxx:(.text+0x33): undefined reference to `Dict::lookup(char*, Object*, std::__1::set<int, std::__1::less<int>, std::__1::allocator<int> >*)'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

在哪里:
$ nm -D /usr/lib/x86_64-linux-gnu/libpoppler.so | grep lookup | c++filt| grep \ Dict::lookup\(
00000000000c1870 T Dict::lookup(char*, Object*, std::set<int, std::less<int>, std::allocator<int> >*)

代码很简单:
#include <poppler/PDFDoc.h>

int main()
{
Dict *infoDict;
Object obj;
infoDict->lookup((char*)"key", &obj);
return 0;
}

最佳答案

根据您的错误,应该就像您正在尝试将libc++与stdlibc++链接在一起一样,
libc++和stdlibc++是不同的,stdlibc++是gcc的c++标准库,它将彼此不兼容。

对于您的问题,就像您的libpoppler.so正在使用stdlibc++,
但是在您的clang命令行中,您尝试将libc++用作标准lib,它们在链接阶段具有不同的名称,有关详细原因,请参见此答案末尾的链接。

因此,也许您的解决方案只是将compile命令更改为

    clang++ -stdlib=libstdc++  po.cxx -lpoppler

请查看此问题以获取为什么使用std:__ 1::set和std::set的详细信息。

Why can't clang with libc++ in c++0x mode link this boost::program_options example?

关于linker-errors - clang++ -stdlib = libc++导致 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18459894/

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