Open maxchen32 opened 4 months ago
Bot detected the issue body's language is not English, translate it automatically.
Title: add_deps cannot be automatically linked
贴下完整 -vD logs,并且提供一个可复现的 example project
Bot detected the issue body's language is not English, translate it automatically.
Post the complete -vD logs and provide a reproducible example project
他说的可能是这种情况:
-- xmake.lua
target('foo', function()
set_kind('object')
add_files('foo.c')
before_build(function(T)
io.writefile(
'foo.c',
[[
void foo() {}
]]
)
end)
end)
target('shared', function()
set_kind('shared')
add_deps('foo')
end)
target('add_deps', function()
set_kind('binary')
add_files('main.c')
add_deps('shared')
before_build(function(T)
io.writefile(
'main.c',
[[
extern void foo();
int main() {
foo();
}
]]
)
end)
end)
[ 40%]: cache compiling.release foo.c
/usr/bin/gcc -c -m64 -o build/.objs/foo/linux/x86_64/release/foo.c.o foo.c
[ 50%]: cache compiling.release main.c
/usr/bin/gcc -c -m64 -o build/.objs/add_deps/linux/x86_64/release/main.c.o main.c
[ 70%]: linking.release libshared.so
/usr/bin/g++ -o build/linux/x86_64/release/libshared.so build/.objs/foo/linux/x86_64/release/foo.c.o -shared -m64 -fPIC
[ 90%]: linking.release add_deps
/usr/bin/g++ -o build/linux/x86_64/release/add_deps build/.objs/add_deps/linux/x86_64/release/main.c.o -m64 -Wl,-rpath=$ORIGIN
/usr/bin/ld: build/.objs/add_deps/linux/x86_64/release/main.c.o: in function `main':
main.c:(.text+0xa): undefined reference to `foo'
collect2: error: ld returned 1 exit status
error: execv(/usr/bin/g++ -o build/linux/x86_64/release/add_deps build/.objs/add_deps/linux/x86_64/release/main.c.o -m64 -Wl,-rpath=$ORIGIN) failed(1)
链接 add_deps 时没有 -lshared
flag.
Xmake 版本
v2.9.1+HEAD.0c79f6162
操作系统版本和架构
Windows 8.1
描述问题
我的xmake.lua如下
执行后部分输出如下:
在
target("eyyc")
中有add_deps("radicalite_shared")
继承动态库依赖,然而生成的编译命令中并没有-L
和-l
,linker也不会链接这个库,导致链接失败。在v2.7.5版本中似乎没有此问题。
期待的结果
linker能够链接通过add_deps依赖的动态库
工程配置
见“描述问题”
附加信息和错误日志
(
*****
是我在输出后手动遮蔽的目录,对问题无影响)