【问题标题】:Error compiling project that uses libvncserver编译使用 libvncserver 的项目时出错
【发布时间】:2018-03-29 14:59:29
【问题描述】:

我正在尝试编译一个使用 libvncserver 的项目。

这是我的 Makefile:

CC = gcc
OBJS = rcmain.o events.o util.o cursor.o sockets.o table_crypt.o
LOBJ = launcher.o util.o d3des/d3des.o
CFLAGS = -Wall -O2 -static-libgcc -fomit-frame-pointer -std=gnu99
LIBS = -lXtst -lXext -lX11 -lpthread -ljpeg -lz

all: $(OBJS) $(LOBJ)
    $(CC) $(OBJS) $(CFLAGS) $(LIBS) /usr/lib/x86_64-linux-gnu/libvncserver.a -o tvnc
    strip -s tvnc

clean:
    rm -f *.o *.bak core ivvnc tvnc

我得到了休闲错误:

/usr/lib/x86_64-linux-gnu/libvncserver.a(rfbserver.o): na função `rfbClientConnectionGone':
(.text+0x934): referência indefinida para `deflateEnd'
/usr/lib/x86_64-linux-gnu/libvncserver.a(rfbserver.o): na função `rfbClientConnectionGone':
(.text+0x948): referência indefinida para `deflateEnd'
/usr/lib/x86_64-linux-gnu/libvncserver.a(rfbserver.o): na função `rfbSendFileTransferChunk':
(.text+0x1d5e): referência indefinida para `compress'
/usr/lib/x86_64-linux-gnu/libvncserver.a(rfbserver.o): na função `rfbProcessFileTransfer':
(.text+0x237a): referência indefinida para `uncompress'
/usr/lib/x86_64-linux-gnu/libvncserver.a(websockets.o): na função `webSocketsEncodeHixie':
(.text+0x26): referência indefinida para `__b64_ntop'
/usr/lib/x86_64-linux-gnu/libvncserver.a(websockets.o): na função `webSocketsEncodeHybi':
(.text+0xd4): referência indefinida para `__b64_ntop'
/usr/lib/x86_64-linux-gnu/libvncserver.a(websockets.o): na função `webSocketsDecodeHybi':
(.text+0x4bc): referência indefinida para `__b64_pton'
/usr/lib/x86_64-linux-gnu/libvncserver.a(websockets.o): na função `webSocketsDecodeHixie':
(.text+0x774): referência indefinida para `__b64_pton'
/usr/lib/x86_64-linux-gnu/libvncserver.a(websockets.o): na função `webSocketsCheck':
(.text+0xfb6): referência indefinida para `__b64_ntop
...

你能帮帮我吗?

谢谢。

【问题讨论】:

  • 是否需要为 libvncserver 添加链接标志? (-lvncserver)?
  • @ChristianGibbons 他已经明确地静态链接了它 - /usr/lib/x86_64-linux-gnu/libvncserver.a - 未定义的引用是 in 它,而不是 to 它。跨度>
  • 使用链接标志-lvncserver,有没有办法在我的应用程序中静态包含这个库?谢谢。

标签: c gcc makefile


【解决方案1】:

您链接到 zlib 太早了;在链接到静态库时,顺序很重要。尝试将$(LIBS) 放在 vncserver 静态库之后。

您可以考虑使用pkg-config; libvncserver 提供了一个 *.pc 文件,这几乎就是它的设计目的……在我的系统上,pkg-config --libs libvncserver 看起来像:

-lvncserver -lnsl -lpthread -lz -lpng -ljpeg -lresolv -lgcrypt -ldl -lgpg-error -lgnutls -lz

【讨论】:

  • 他正在链接-lz,但为时过早
  • 谢谢。它完美地工作!我可以利用并问另一个问题吗?你知道我如何调整这个 makefile 来编译 32 位和 64 位吗?
  • @Guilherme 请参阅What should I do when someone answers my question?。如果您还有其他问题,请点击
猜你喜欢
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多