- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 2016 Intel C++ 编译器 icpc (ICC) 16.0.2 20160204 构建 LLVM 3.8(只是基本的 LLVM 而不是 Clang 等)。构建主机运行 Red Hat Linux。
我遇到的第一件事不是英特尔编译器的最新 C++11 header 。这可以通过使用 GCC 4.8.5 C++ header 来解决。 (请注意,英特尔编译器旨在与 GCC 工具链配合使用。)
现在,在构建和链接 tblgen 可执行文件方面取得了一些进展 [12% 左右]。在进一步构建期间需要此工具及其执行。很遗憾,链接此工具失败:
CMakeFiles/obj.llvm-tblgen.dir/CodeGenRegisters.cpp.o: In function `std::list<llvm::CodeGenRegisterClass, std::allocator<llvm::CodeGenRegisterClass> >::swap(std::list<llvm::CodeGenRegisterClass, std::allocator<llvm::CodeGenRegisterClass> >&)':
/opt/crtdc/gcc/4.8.5-4/include/c++/4.8.5/bits/stl_list.h:1212: undefined reference to `std::__detail::_List_node_base::swap(std::__detail::_List_node_base&, std::__detail::_List_node_base&)'
CMakeFiles/obj.llvm-tblgen.dir/CodeGenRegisters.cpp.o: In function `std::list<llvm::CodeGenRegisterClass, std::allocator<llvm::CodeGenRegisterClass> >::_M_transfer(std::_List_iterator<llvm::CodeGenRegisterClass>, std::_List_iterator<llvm::CodeGenRegisterClass>, std::_List_iterator<llvm::CodeGenRegisterClass>)':
/opt/crtdc/gcc/4.8.5-4/include/c++/4.8.5/bits/stl_list.h:1546: undefined reference to `std::__detail::_List_node_base::_M_transfer(std::__detail::_List_node_base*, std::__detail::_List_node_base*)'
CMakeFiles/obj.llvm-tblgen.dir/CodeGenRegisters.cpp.o: In function `void std::list<llvm::CodeGenRegisterClass, std::allocator<llvm::CodeGenRegisterClass> >::_M_insert<llvm::CodeGenRegBank&, llvm::Record*&>(std::_List_iterator<llvm::CodeGenRegisterClass>, llvm::CodeGenRegBank&&&, llvm::Record*&&&)':
/opt/crtdc/gcc/4.8.5-4/include/c++/4.8.5/bits/stl_list.h:1562: undefined reference to `std::__detail::_List_node_base::_M_hook(std::__detail::_List_node_base*)'
CMakeFiles/obj.llvm-tblgen.dir/CodeGenRegisters.cpp.o: In function `void std::list<llvm::CodeGenRegisterClass, std::allocator<llvm::CodeGenRegisterClass> >::_M_insert<llvm::CodeGenRegBank&, llvm::StringRef&, llvm::CodeGenRegisterClass::Key&>(std::_List_iterator<llvm::CodeGenRegisterClass>, llvm::CodeGenRegBank&&&, llvm::StringRef&&&, llvm::CodeGenRegisterClass::Key&&&)':
/opt/crtdc/gcc/4.8.5-4/include/c++/4.8.5/bits/stl_list.h:1562: undefined reference to `std::__detail::_List_node_base::_M_hook(std::__detail::_List_node_base*)'
导致这个的链接器命令是(为了更好的可读性我添加了换行符。这真的是一个命令)
/opt/intel/compiler/2016u2/compilers_and_libraries_2016.2.181/linux/bin/intel64/icpc
-cxxlib=/opt/crtdc/gcc/4.8.5-4/
-std=c++11
-fPIC
-fvisibility-inlines-hidden
-g
-Wl,-allow-shlib-undefined
CMakeFiles/obj.llvm-tblgen.dir/AsmMatcherEmitter.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/AsmWriterEmitter.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/AsmWriterInst.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/Attributes.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/CallingConvEmitter.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/CodeEmitterGen.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/CodeGenDAGPatterns.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/CodeGenInstruction.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/CodeGenMapTable.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/CodeGenRegisters.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/CodeGenSchedule.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/CodeGenTarget.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/DAGISelEmitter.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/DAGISelMatcherEmitter.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/DAGISelMatcherGen.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/DAGISelMatcherOpt.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/DAGISelMatcher.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/DFAPacketizerEmitter.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/DisassemblerEmitter.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/FastISelEmitter.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/FixedLenDecoderEmitter.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/InstrInfoEmitter.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/IntrinsicEmitter.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/OptParserEmitter.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/PseudoLoweringEmitter.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/RegisterInfoEmitter.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/SubtargetEmitter.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/TableGen.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/X86DisassemblerTables.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/X86ModRMFilters.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/X86RecognizableInstr.cpp.o
CMakeFiles/obj.llvm-tblgen.dir/CTagsEmitter.cpp.o
-o ../../bin/llvm-tblgen
-L/usr/lib/gcc/x86_64-redhat-linux/4.4.7
../../lib/libLLVMSupport.a
../../lib/libLLVMTableGen.a
../../lib/libLLVMSupport.a
-lrt
-ldl
-ltinfo
-lpthread
-lz
-lm
-Wl,-rpath,"\$ORIGIN/../lib"
我现在没有 $ORIGIN
变量的值。不知道如何解决这个问题。 (该命令在调用 make VERBOSE=1 时打印)。
-cxxlib=/opt/crtdc/gcc/4.8.5-4/
标志的作用是让 icpc 向 GCC 查询 C++ 头文件的位置并使用它们。
链接器错误消息告诉我(我可能是错的)找到并使用了 GCC C++ 头文件,但不知何故找不到库的编译部分。
我试图通过将上面的 -L 标志替换为 -L/opt/crtdc/gcc/4.8.5-4/lib64/来显式地将编译器推送到 GCC 库中。没用;同样的错误。
然后我查看了 CodeGenRegisters.cpp 文件并将 std::swap 的所有使用提取到单独的、小的、独立的示例中,看看我是否可以重现此链接器错误。不,对于小示例,所有链接都进行得很顺利。 (..我为此使用了 GCC header 来使案例变得真实)。
我希望在这里得到一些意见..
最佳答案
I don't have the value of the $ORIGIN variable right now. Not sure how to get this out.
$ORIGIN
不是变量,它是一个特殊的标记,可以包含在 DT_RPATH
标记中,告诉动态链接器从需要它们的二进制文件。这就是为什么它被转义为 "\$ORIGIN"
以防止 shell 将其视为 shell 变量。您现在可以忽略它,因为它只在运行时很重要,而您的错误是在链接时。
The linker error message says to me (I can be wrong) that the GCC C++ headers files were found and used, but somehow the compiled part of the library was not found.
没错。这些符号在 libstdc++.so(和 libstdc++.a)库中。
I tried to explicitly push the compiler into the GCC library by replacing the above
-L
flag with-L/opt/crtdc/gcc/4.8.5-4/lib64/
. Didn't work; same error.
仅仅告诉它库在哪里是不够的,你需要告诉它实际链接到相关的库。尝试添加 -lstdc++
关于c++ - 对 std::__detail::_List_node_base::swap 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37142984/
我的问题很简单。执行以下操作是否安全? 不需要任何道德建议,例如“不要将函数命名为 swap()!”或者随便什么,拜托! file1.hpp //header guards here #include
我很好奇,所以我检查了swap的源代码! clojure 存储库上的函数,如下所示: (defn swap! "Atomically swaps the value of atom to be:
我正在实现一个与 std::array 具有类似接口(interface)的类,它同时具有 member swap()和 non-member swap() . 由于我希望我的类模仿标准容器,因此我想
这个问题在这里已经有了答案: Rationale behind member function swap (1 个回答) 关闭 4 年前。 如果Coll是标准容器类型,a和b是Coll的实例;那么,
int a=5; b=7; int *pa=&a, *pb=&b; 交换 a 和 b 的值与交换指针的值有何不同,即 pa和 pb (不是 *pa 和 *pb )?两种情况下的结果不一样吗? 我们什么
好的,这是程序,绝对正确 #include using namespace std; template void Swap(T &a , T &b); int main(){ int i
std::swap() 函数是否可以在具有各种不同对象作为变量成员的类中正常工作?特别是,如果其中一些成员是智能指针? class test { ... std::shared_ptr
我正在尝试实现 copy-and-swap idiom在我的自定义 Matrix 类中,我按照链接问题中建议的方式执行 swap() 时遇到了一些麻烦: (我使用的编译器是MS VS2010 IDE的
我知道 ADL 是什么,我知道在 C++ 中,内部作用域函数隐藏外部作用域函数。也就是说,名称不会跨范围重载。所以函数重载需要在相同的范围内完成。 现在我的问题是,对于这个通用代码片段: #inclu
给定两个 std::vector v1, v2。 我想知道使用 std::swap(v1, v2) 比 v1.swap(v2) 有什么好处。 我已经实现了一个关于性能观点的简单测试代码(我不确定它是否
std::string 有一个成员函数 swap,这是交换两个大字符串的有效方法。 既然我们有了 move 语义,那么,给定两个大字符串 s1 和 s2,以下代码 s1.swap(s2); 在效率方面
同时使用 copy-and-swap idiom在一个具有常量引用作为成员的类中, 出现上述错误。 示例代码: #include #include using std::reference_wra
背景 考虑以下代码: #include namespace ns { struct foo { foo() : i(0) {} int i;
我们有: vector f(int); vector v; 这个有效: f(x).swap(v); 这不是: v.swap(f(x)); 为什么? 最佳答案 swap()对 vector 进行非常量引
我已在 Azure 中配置了一个生产和暂存槽,每个槽都使用自己的 SQL Azure 数据库。 每个连接字符串都配置为“粘性”。 但是,当我将生产槽(目标)与暂存槽(源)交换时,我收到以下警告。 这条
我有以下代码: char swap(char reg, char* mem) { std::swap(reg, *mem); return reg; } 我希望这可以编译为: swap
我使用 xor-swap 的插入排序不工作,但没有 xor-swap 它工作正常。如何修复我的异或交换插入排序算法? 没有异或交换的插入排序 - //sorts the given array in
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我正在实现 copy-and-swap idiom对于我设计的一个小型非拥有内存引用对象的 operator=。当 MemRef 引用我信任其生命周期的一 block 缓冲区时,_ptr 指向缓冲区,
我有两个问题,第二个是可选的。首先,在下面的程序(一个简单的卡片程序的原型(prototype))中,我得到以下错误: (29): error C2660: 'shuffle' : function
我是一名优秀的程序员,十分优秀!