簡體   English   中英

如何將msgpack正確鏈接到共享庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM