如何在Linux上控制使用“dotnet publish --self-contained”创建的启动器的RPATH?

9vw9lbht  于 2023-11-17  发布在  Linux
关注(0)|答案(1)|浏览(107)

当使用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。

pbgvytdp

pbgvytdp1#

看这
已发布的.NET Core应用程序的主要可执行文件.具有RPATH属性设置为$ORIGIN/netcoredeps
它并不意味着是可配置的。
来源:https://github.com/dotnet/core/blob/main/Documentation/self-contained-linux-apps.md
总有patchelf,你可以用它来编辑或删除RPATH。

相关问题