-
-
Notifications
You must be signed in to change notification settings - Fork 6.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
macOS10.12/Xcode8 introduces run-time crash when building libcurl for earlier iOS versions #1069
Comments
sitsofe
added a commit
to sitsofe/fio
that referenced
this issue
Feb 11, 2017
macOS 10.12 introduces support for clock_gettime. Unfortunately when compiling with XCode 8 (or later) and targeting 10.11 or older the clock_gettime symbol will be found at configure/compile time and the symbol will be referenced weakly. Running the binary on 10.11 results in a "dyld: lazy symbol binding failed: Symbol not found: _clock_gettime" error. This drama has played out across other projects: - Homebrew/homebrew-core#2674 - curl/curl#1069 - https://svn.filezilla-project.org/filezilla?view=revision&revision=7824OO - mesonbuild/meson#949 - https://github.com/Homebrew/homebrew-core/issues?utf8=%E2%9C%93&q=label%3Aclock_gettime%20 Options for working around this issue include: 1. Turn references to symbols that might be weak into compilation errors (-Werror=partial-availability). 2. Disable visibility of symbols that might be weak (-Wl,-no_weak_imports). 3. Change configure tests to explictly fail by explictly checking if the targeted OSX is older than a version known to have the required symbol. This commit tries 2. when targeting the Darwin platform after checking if the compiler/linker work with that option. Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
sitsofe
added a commit
to sitsofe/fio
that referenced
this issue
Feb 11, 2017
macOS 10.12 introduces support for clock_gettime. Unfortunately when compiling with XCode 8 (or later) and targeting 10.11 or older the clock_gettime symbol will be found at configure/compile time and the symbol will be referenced weakly. Running the binary on 10.11 results in a "dyld: lazy symbol binding failed: Symbol not found: _clock_gettime" error. This drama has played out across other projects: - Homebrew/homebrew-core#2674 - curl/curl#1069 - https://svn.filezilla-project.org/filezilla?view=revision&revision=7824OO - mesonbuild/meson#949 - https://github.com/Homebrew/homebrew-core/issues?utf8=%E2%9C%93&q=label%3Aclock_gettime%20 Options for working around this issue include: 1. Turn references to symbols that might be weak into compilation errors (-Werror=partial-availability). 2. Disable visibility of symbols that might be weak (-Wl,-no_weak_imports). 3. Change configure tests to explictly fail by explictly checking if the targeted OSX is older than a version known to have the required symbol. This commit tries 2. when targeting the Darwin platform after checking if the compiler/linker work with that option. Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
sitsofe
added a commit
to sitsofe/fio
that referenced
this issue
Feb 12, 2017
macOS 10.12 introduced support for clock_gettime() but when compiling with Xcode 8 (or later) and targeting 10.11 (or older) the clock_gettime symbol is now found at configure/compile time but referenced weakly. Running the created binary on 10.11 results in a "dyld: lazy symbol binding failed: Symbol not found: _clock_gettime" error. This drama has played out across other projects: - Homebrew/homebrew-core#2674 - curl/curl#1069 - https://svn.filezilla-project.org/filezilla?view=revision&revision=7824OO - mesonbuild/meson#949 - https://github.com/Homebrew/homebrew-core/issues?utf8=%E2%9C%93&q=label%3Aclock_gettime%20 Options for working around this issue include: 1. Turn references to functions that might be weak into compilation errors (-Werror=partial-availability). 2. Disable visibility of functions that might be weak at compile link time (-Wl,-no_weak_imports). 3. Change configure tests to directly check the targeted OSX version and fail the test if it is too old to have the required function. 4. Make an empty function declaration marked with __attribute__((weak_import)) that is used if the symbol would otherwise be unavailable. It is then possible to check if the symbol is NULL at runtime to determine availability. This commit does 2. when targeting the Darwin platform after checking if the compiler/linker work with that option. It also changes the clockid_t configure test to no longer use clock_gettime() because targeting OSX 10.11 when using the 10.12 SDK results in having clockid_t symbol without having the clock_gettime function. The combination of these fixes should solve axboe#305 . Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
sitsofe
added a commit
to sitsofe/fio
that referenced
this issue
Feb 13, 2017
macOS 10.12 introduced support for clock_gettime() but when compiling with Xcode 8 (or later) and targeting 10.11 (or older) the clock_gettime symbol is now found at configure/compile time but referenced weakly. Running the created binary on 10.11 results in a "dyld: lazy symbol binding failed: Symbol not found: _clock_gettime" error. This drama has played out across other projects: - Homebrew/homebrew-core#2674 - curl/curl#1069 - https://svn.filezilla-project.org/filezilla?view=revision&revision=7824OO - mesonbuild/meson#949 - https://github.com/Homebrew/homebrew-core/issues?utf8=%E2%9C%93&q=label%3Aclock_gettime%20 Options for working around this issue include: 1. Turn references to functions that might be weak into compilation errors (-Werror=partial-availability). 2. Disable visibility of functions that might be weak at compile link time (-Wl,-no_weak_imports). 3. Change configure tests to directly check the targeted OSX version and fail the test if it is too old to have the required function. 4. Make an empty function declaration marked with __attribute__((weak_import)) that is used if the symbol would otherwise be unavailable. It is then possible to check if the symbol is NULL at runtime to determine availability. This commit does 2. when targeting the Darwin platform after checking if the compiler/linker work with that option. It also changes the clockid_t configure test to no longer use clock_gettime() because targeting OSX 10.11 when using the 10.12 SDK results in having the clockid_t typedef without having the clock_gettime function. The combination of these fixes should solve axboe#305 . Signed-off-by: Sitsofe Wheeler <sitsofe@yahoo.com>
This issue was closed.
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Peter White reported the issue on the mailing list back in September. I'm filing it here so that it won't be forgotten. I've quoted a piece below.
A possible fix is to make the configure use the correct flags, as suggested by Martin Storsjö.
The text was updated successfully, but these errors were encountered: