Ian
Ian
Ian
You'll need -asmflags -shared as well, perhaps?
> We
> have found that if this plugin using this shared library gets loaded first,
> then we don't encounter the static TLS failure.
Are you saying that if you load a bunch of plugins that do not have
STATIC_TLS set, then load one that does, you get an error? Whereas if
you load the STATIC_TLS one first, all is OK? That's a bit surprising
to me, but I don't know all the details for sure.
/usr/src/app # go build -o cc.so -buildmode=c-shared main.go
/usr/src/app # readelf -d cc.so
Dynamic section at offset 0x10cd10 contains 22 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libc.musl-x86_64.so.1]
0x0000000000000010 (SYMBOLIC) 0x0
0x000000000000000c (INIT) 0x42000
0x000000000000000d (FINI) 0x92ed9
0x0000000000000019 (INIT_ARRAY) 0xa2078
0x000000000000001b (INIT_ARRAYSZ) 8 (bytes)
0x000000006ffffef5 (GNU_HASH) 0x270
0x0000000000000005 (STRTAB) 0xa50
0x0000000000000006 (SYMTAB) 0x378
0x000000000000000a (STRSZ) 1026 (bytes)
0x000000000000000b (SYMENT) 24 (bytes)
0x0000000000000003 (PLTGOT) 0x10deb0
0x0000000000000002 (PLTRELSZ) 720 (bytes)
0x0000000000000014 (PLTREL) RELA
0x0000000000000017 (JMPREL) 0x41a00
0x0000000000000007 (RELA) 0xe58
0x0000000000000008 (RELASZ) 265128 (bytes)
0x0000000000000009 (RELAENT) 24 (bytes)
0x000000000000001e (FLAGS) SYMBOLIC BIND_NOW STATIC_TLS
0x000000006ffffffb (FLAGS_1) Flags: NOW NODELETE
0x000000006ffffff9 (RELACOUNT) 11040
0x0000000000000000 (NULL) 0x0
/usr/src/app # python test.py
Traceback (most recent call last):
File "test.py", line 2, in
lib = ctypes.cdll.LoadLibrary('./cc.so')
File "/usr/lib/python2.7/ctypes/init.py", line 444, in LoadLibrary
return self._dlltype(name)
File "/usr/lib/python2.7/ctypes/init.py", line 366, in init
self._handle = _dlopen(self._name, mode)
OSError: Error relocating ./cc.so: : initial-exec TLS resolves to dynamic definition in ./cc.so
I find the package you build with 'go build buildmode=c-archive/c-shared', when you build you code with the lib, the outer need to have main func, I don't know why.
在 2016年5月18日星期三 UTC+8上午11:11:57,Justin Israel写道:I'm wondering if someone can tell me if this is either a limitation of buildmode=c-archive static libs, or if I am really just doing something wrong.Problematic steps:
- export functions to libgofoo.a using buildmode=c-archive
- statically link libgofoo.a into another library to produce libfoo.a
- Someone else consumes libfoo.a and libgofoo.a in their library, and get linker errors about:
ld: libgofoo.a(go.o): relocation R_X86_64_TPOFF32 against `runtime.tlsg` can not be used when making a shared object; recompile with -fPIC
libgofoo.a: could not read symbols: Bad valueBut library that wants to consume these libs can do so if they dynamically link with shared libs from c-shared. Also, if the consumer of the libs is a main binary, then the static linking works and does not complain. It is only when the target is a library.I could swear I went through and ensured -fPIC was being used, but it didn't seem to make a difference. Am I infact just messing up my compilation settings and failing to add this flag as it suggests, or is there a known limitation related to the steps I have outlined?Thanks!Justin
--
You received this message because you are subscribed to a topic in the Google Groups "golang-nuts" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/golang-nuts/EhndTzcPJxQ/unsubscribe.
To unsubscribe from this group and all its topics, send an email to golang-nuts...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/2032198a-00dd-40a8-a8aa-489e9ae406bf%40googlegroups.com.
To unsubscribe from this group and all its topics, send an email to golan...@googlegroups.com.