Dynamic Library Install Name

I used to have a static library, I turned it into a dynamic library, which was more difficult than I expected.

I already had a small project, containing a command line tool which loads a dynamic library. This was created direct from Xcode 15.3's macOS app and dynamic library templates.

This is how I configured the Dynamic Library Install Name Base to @rpath. Note that there is nothing in the Dynamic Library Install Name target setting, but it resolves to @rpath/libCLI_library.dylib.

If I click on it once, I can see the value

I click on it again to see how this value is generated

The expression it is generated from is $(LD_DYLIB_INSTALL_NAME_$(LLVM_TARGET_TRIPLE_VENDOR):default=$(EXECUTABLE_PATH))

Using a Run Script phase I can see the environment variables, which include LLVM_TARGET_TRIPLE_VENDOR = “apple”, and LD_DYLIB_INSTALL_NAME_apple = “@rpath/libCLI_.dylib”

If I look at the environment variables in my other dylib project, which started life as a static library, although LLVM_TARGET_TRIPLE_VENDOR is set to "apple", there is no LD_DYLIB_INSTALL_NAME_apple variable at all, so even if I paste the expression above into the LD_DYLIB_INSTALL_NAME setting, it does me no good, because it evaluates to EXECUTABLE_PATH, which is libXXX.dylib, but I'd like @rpath/libXXX.dylib.

So my question are, where does LD_DYLIB_INSTALL_NAME_apple come from? where does the magic invisible expression for Dynamic Library Install Name come from? the quick help for Dynamic Library Install Name mentions "if this option is not specified, the -o path will be used" - what build setting is that?

Answered by DTS Engineer in 789376022

I’m not sure what problem you’re trying to solve here. It sounds like you’re trying to convert a static library target into a dynamic library target, and that won’t work [1]. Xcode has hard-wired knowledge that it applies to each target type. If you have a static library target and you need to build a dynamic library, you should create a new dynamic library target.

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

[1] Well, you can edit the Xcode project file by hand, but that’s not something I recommend.

Accepted Answer

I’m not sure what problem you’re trying to solve here. It sounds like you’re trying to convert a static library target into a dynamic library target, and that won’t work [1]. Xcode has hard-wired knowledge that it applies to each target type. If you have a static library target and you need to build a dynamic library, you should create a new dynamic library target.

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

[1] Well, you can edit the Xcode project file by hand, but that’s not something I recommend.

Well, that was unexpected, but good to know.

Dynamic Library Install Name
 
 
Q