简体   繁体   中英

clang, linux, is there an option to change shared library name at linking?

I'm testing a somewhat non-conventional project layout and rake as make utility. There is a rule to compile binaries from source files in different directories and link them with a shared library. This rule is run from the root directory of the project. For instance the rule does this:

clang -I libs/ -o tests/sourcefile2 tests/sourcefile2.c shared_libs/libFoo.so

And as a result I get the full path shared_libs/libFoo.so in the binary:

readelf -d tests/sourcefile2
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [shared_libs/libFoo.so]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
...

I would like to change it to just 'libFoo.so' like this:

readelf -d tests/sourcefile2
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libFoo.so]
...

Then I could set RPATH for dynamic linker as I want and it would give some flexibility. But I cannot find the corresponding option or similar example. Could you suggest how to handle this? Should I just use a temporary directory for the build, copy everything and compile there?

Not sure if it will help you. But when I try compile some shit and I don't know what flags. I use pkg-config .

For example, to compile a program which uses Xlib

pkg-config -cflags -libs x11

and the output is the following

-I/usr/X11R7/include -D_REENTRANT -Wl,-rpath,/usr/X11R7/lib -L/usr/X11R7/lib -lX11

Note this vary on systems, for example NetBSD forces me to link it with rpath , and there are optional arguments in this output.

So I copy the output of pkg-config and it compiles.

如果您使用'ld'作为链接器,则应该能够使用“-Wl,-soname”。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM