如果依赖项具有另一个需要 link 静态库的依赖项,则无法 link
fails to link if a dependency has another dependency that needs to link with a static library
我有一个图书馆 (qui) that depends on the another library (termbox-d)。以及带有静态库 libtermbox.a
的 termbox-d links。
注意:我 link 编辑的 termbox-d 有一些错误,我已在我的 fork 中修复,但拉取请求尚未合并。
这就是事情变得混乱的地方:
如果我将 qui
编译为库,它会编译。表示 termbox-d
link 与 libtermbox.a
编辑。
如果我用 dub build --comfig=demo
编译 qui
,它将把它构建为一个可执行文件,其中的主程序使用 qui
库,而主程序库使用 termbox-d
。这个构建和运行良好。表明它仍然 link 正常。
但是如果我创建另一个依赖于 qui
的包并构建它,它无法 link 和 libtermbox.a。我收到如下错误:
source/termbox/package.d:210: undefined reference to
tb_peek_event'
So now it failed to link with
libtermbox.a`
为什么会发生这种情况,我是如何让它发挥作用的?
感谢 chat.freenode.net 上 IRC 频道#d 上的 alphaglosined,我解决了这个问题:
而不是添加
"sourceFiles" : ["libtermbox.a"]
对于 qui
的 dub.json
,我必须添加
"lflags" : ["$PACKAGE_DIR/libtermbox.a"]
.
现在可以了。
我有一个图书馆 (qui) that depends on the another library (termbox-d)。以及带有静态库 libtermbox.a
的 termbox-d links。
注意:我 link 编辑的 termbox-d 有一些错误,我已在我的 fork 中修复,但拉取请求尚未合并。
这就是事情变得混乱的地方:
如果我将 qui
编译为库,它会编译。表示 termbox-d
link 与 libtermbox.a
编辑。
如果我用 dub build --comfig=demo
编译 qui
,它将把它构建为一个可执行文件,其中的主程序使用 qui
库,而主程序库使用 termbox-d
。这个构建和运行良好。表明它仍然 link 正常。
但是如果我创建另一个依赖于 qui
的包并构建它,它无法 link 和 libtermbox.a。我收到如下错误:
source/termbox/package.d:210: undefined reference to
tb_peek_event'
So now it failed to link with
libtermbox.a`
为什么会发生这种情况,我是如何让它发挥作用的?
感谢 chat.freenode.net 上 IRC 频道#d 上的 alphaglosined,我解决了这个问题:
而不是添加
"sourceFiles" : ["libtermbox.a"]
对于 qui
的 dub.json
,我必须添加
"lflags" : ["$PACKAGE_DIR/libtermbox.a"]
.
现在可以了。