当使用dotnet publish --self-contained
时,会得到一个具有硬编码RPATH的启动器,如下所示:
$ llvm-readelf-16 -d launcher
Dynamic section at offset 0x217b0 contains 33 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
0x0000000000000001 (NEEDED) Shared library: [libdl.so.2]
0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6]
0x0000000000000001 (NEEDED) Shared library: [libm.so.6]
0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000000f (RPATH) Library rpath: [$ORIGIN/netcoredeps]
...
字符串
我已经尝试在调用dotnet publish
时用LDFLAGS
解决这个问题。唉,我认为ld
甚至没有在后台被调用,因此这没有任何效果。
所以我的问题是:有没有一种方法可以控制用dotnet publish
创建的启动器的RPATH?
PS:目前在Ubuntu 22.04(打包的.NET)上使用.NET 6.x。
1条答案
按热度按时间pbgvytdp1#
看这
已发布的.NET Core应用程序的主要可执行文件.具有RPATH属性设置为$ORIGIN/netcoredeps
它并不意味着是可配置的。
来源:https://github.com/dotnet/core/blob/main/Documentation/self-contained-linux-apps.md
总有patchelf,你可以用它来编辑或删除RPATH。