[英]How to properly link msgpack into a shared library
我正在嘗試將使用msgpack-c函數的幾個.c文件編譯到共享庫中。 我有以下Makefile:
MSGPACK_CS = msgpack.c
CFLAGS = -std=c99
MSGPACK_OBJECTS = $(subst .c,.o,$(MSGPACK_CS))
MSGPACK_LIBS = msgpack.so
all: $(MSGPACK_OBJECTS) $(MSGPACK_LIBS)
%.o: %.c
$(CC) -c -shared -fPIC $(CFLAGS) $<
$(MSGPACK_LIBS): $(MSGPACK_OBJECTS)
ld -Lmsgpack/.libs -share -o $@ $(MSGPACK_OBJECTS) -lmsgpack
我可以毫無問題地編譯使用msgpack的程序,但這會給我以下錯誤:
msgpack.o: In function `msgpack_pack_int64':
/usr/local/include/msgpack/pack_template.h:373: undefined reference to `__stack_chk_fail_local'
ld: msgpack.so: hidden symbol `__stack_chk_fail_local' isn't defined
ld: final link failed: Bad value
顯然,鏈接過程進展不順利,但我不知道出什么問題了。 我能做什么?
嘗試與gcc驅動程序鏈接,而不是直接調用ld
。 ld
不了解C運行時所需的gcc支持庫:
gcc -Lmsgpack/.libs -shared -o $@ $(MSGPACK_OBJECTS) -lmsgpack
如果仍然不能解決問題,則可能需要在CFLAGS中添加-fno-stack-protector
來禁止運行時堆棧檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.