- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我在链接过程中出现了一个奇怪的问题。
我有一个包含以下定义的头文件 foo.hpp
:
struct Foo { static __thread int x; }
以及引用该变量 plugin.cpp
的源文件:
#include "foo.hpp"
void bar() { int y = Foo::x; }
它编译得很好:
$CXX -stdlib=libc++ -std=c++11 -fvisibility=hidden -fPIC -o plugin.cpp.o -c plugin.cpp
但是当我尝试链接为动态库时:
$CXX -stdlib=libc++ -std=c++11 -fvisibility=hidden -dynamiclib -Wl,-undefined,dynamic_lookup -o libext.dylib ext.cpp.o
我明白了:
ld: illegal thread local variable reference to regular symbol __ZN3Foo1xE for architecture x86_64
然而 llvm 字节码暗示编译器正确地将 Foo::x
视为 TLS 变量。
$CXX -stdlib=libc++ -std=c++11 -fvisibility=hidden -fPIC -S -emit-llvm -o -
... omitted
@_ZN3Foo1xE = external thread_local global i32
... omitted
; Function Attrs: nounwind ssp uwtable
define hidden void @_Z3barv() #0 {
%y = alloca i32, align 4
%1 = load i32* @_ZN3Foo1xE, align 4
store i32 %1, i32* %y, align 4
ret void
}
什么可能导致此链接器问题,是否有解决方法?我似乎找不到任何与此相关的错误报告。
注意事项:
编辑引用全局(而不是静态类)变量时也存在同样的问题。
当我使用 thread_local
代替 __thread
时,这可以正常工作,但是 thread_local
不适用于随附的 LLVM 版本Xcode。
最佳答案
Apple 的可执行文件格式(我相信 MACH-O)不允许 Thread 本地存储。真是让人头疼。您必须在线程库的内存分配中创建空间并在其中隐藏线程局部变量。它非常非常晦涩。
关于c++ - TLS 变量上的 "illegal thread-local reference to regular symbol"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34212217/
我正在使用 Swift 开发一个项目,当时我正在使用 Storyboard为 iPad 和 iPhone 创建 UI,因此我同时需要更改 Storyboard的大小(我使用的是大小类)。在我为 iPh
此示例数据由 Web 服务返回 200,6, "California, USA" 我想使用 split(",") 拆分它们并尝试使用简单的代码查看结果。 String loc = "200,6,\"C
我正在尝试创建正则表达式,以便我可以使用 LucidWorks 对我网站上的某些 URL 进行爬网和索引。 示例网址:http://www.example.com/reviews/assassins-
在检查给定语言是否正常时,我有点困惑。 假设我们必须检查是否: L. The language accepting even number of 0's in regular or not? 我们知道
我真的是新手,所以我为这里的笨拙而道歉。 构造识别以下语言的Deterministic Finite Automaton DFA: L= { w : w has at least two a's an
Pumping Lemma被用来证明一种不规则的语言。但是语言如何 证明是正常的?尤其是, Let L be a language. Define half(L) to be { x | for s
我刚刚开始阅读有关泵送引理的内容,并且知道如何进行一些证明,主要是通过反证法。我似乎找不到答案,只是这个特殊问题。我不知道如何开始。我可以假设必须有一个泵浦长度 P 并且对于 L 的所有 w 元素,L
如果语言 L1,...,Ln 是正则的,那么它们的并集也是正则的吗? 我们知道两种正则语言的并集是正则语言。如何证明多个正则语言的并集也是正则的? 最佳答案 您可以使用归纳法。这是一个非常非常生锈的证
如果对于其语言中的任何字符串 w,PDA(Pushdown Automaton)最多转动其堆栈的方向 k 次,则称其为 k 转。众所周知,语言 L 是线性的当且仅当被 1 圈 PDA 接受。现在,常规
如果语言 L1,...,Ln 是正则的,那么它们的并集也是正则的吗? 我们知道两种正则语言的并集是正则语言。如何证明多个正则语言的并集也是正则的? 最佳答案 您可以使用归纳法。这是一个非常非常生锈的证
给 R 常规语言。 下面的语言是否也是正则的: Comp(R) = { u | u is NOT a sub-word of a word in R } 看起来 Comp(R) 中没有单词,因为 R
设 L1 和 L2 是字母表 {a,b} 上的常规语言。我们定义语言 L3 如下: L3 = {pqr | pr ∈ L1, q ∈ L2} L3 是通过将来自L2 的字符串插入来自L1 的字符串而获
我们都知道(a + b)*是仅包含符号的常规语言 a和 b . 但是(a + b)*是一个无限长的字符串,它是有规律的,因为我们可以建立一个有限自动机,所以它应该是有限的。 任何人都可以解释一下吗?
如何计算常规语言的最小抽水长度。例如,如果我有 0001*,那么最小抽气长度应该是 4,即 000 无法抽气。为什么会这样? 最佳答案 它将小于或等于该语言的最小 DFA 中的状态数减去一。因此,将正
我有以下代码可以执行我想要的操作,从该命令的结果中检索包名称: 命令: dpkg --get-selections | grep amule 要分析的字符串: string = 'amule\t\t\
1、什么是正则表达式? 简单的说:正则表达式(Regular Expression)是一种处理字符串匹配的语言; 正则表达式描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串,
前言 正则表达式是烦琐的,但是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真去阅读这些资料,加上应用的时候进行一定的参考,掌握正则表达式不是问题。 1. 引子
给定 L1 上下文无关的非正则语言。 给定 L2 常规语言。 L1 U L2 =常规语言有可能吗? 另外,L1*L2 = 常规语言有可能吗? 我认为第二个是不可能的。但我不确定。 如果上述陈述之一(或
我需要解决抽奖引理问题。 L = { {a,b,c}* | #a(L) N个字母。 pigeon principle告诉我们必须存在一个达到2次的状态,因此在该状态下将存在一个循环。 用您的符号,您
我知道 n > 0 的 anbn 不是抽引引理的规则,但我可以想象 a*b*是常规的,因为 a,b 不必是相同的长度。有没有证据证明它是正常的? 最佳答案 回答你的问题: imagine a*b* t
我是一名优秀的程序员,十分优秀!