Неожиданная ошибка 24 (слишком много открытых файлов) от компоновщика ld

Я пытаюсь собрать Stepmania (https://github.com/stepmania/stepmania @ master[a09e3477 ]) на OSX 10.10 с Xcode 6.0.1. Другие успешно сделали это на OSX 10.10, хотя из-за даты слияния это было бы должен был быть в более ранней версии инструментов командной строки Xcode, чем были выпущены вчера, которые я использую.

В конце сборки Xcode шаг связывания завершается неудачей:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDK/MacOSX10. 9.sdk -L/Users/nilbus/stepmania -L/Users/nilbus/stepmania/Xcode/build/Debug -L/Users/nilbus/stepmania/Xcode/Libraries -L/Users/nilbus/stepmania/Xcode/.. /extern/mad-0.15.1b/msvc++/Release -L/Users/nilbus/stepmania/Xcode/ffmpeg -L/Users/nilbus/stepmania/Xcode/ffmpeg/lib -F/Users/nilbus/stepmania -F/Applications /Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDK/MacOSX10.9.sdk/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks -filelist/Users/nilbus/stepmania/Xcode /build/stepmania.build/Debug/stepmania.build/Objects-normal/i386/StepMania\ (Debug).LinkFileList -mmacosx-version-min=10.6 -dead_strip -no_dead_strip_inits_and_terms -lbz2 -fobjc-link-runtime -framework Ускорение - framework Cocoa -framework Carbon -framework IOKit -framework QuickTime -framework OpenGL -framework CoreFoundation -framework AudioToolbox -framework AudioUnit -framework CoreAudio -framework vecLib -logg_link -ltheora_link -lvorbis_link -llua-5.1-sm5 -ltomcrypt-sm5 -ltommath-sm5 -lz_link -lmad-sm5 -lpng-1.5.1 -sm5 -lglew-sm5 -lpcre-sm5 -ljpeg-sm5 -lavcodec -lavdevice -lavfilter -lavformat -lavutil -lswresample -lswscale -Xlinker -dependency_info -Xlinker /Users/nilbus/stepmania/Xcode/build/stepmania.build/Debug /stepmania.build/Objects-normal/i386/StepMania\ (отладка)_dependency_info.dat -o /Users/nilbus/stepmania/StepMania\ (отладка).app/Contents/MacOS/StepMania\ (отладка)

с этой ошибкой:

ld: can't open file, errno=24 file '/Users/nilbus/stepmania/Xcode/build/stepmania.build/Debug/stepmania.build/Objects-normal/i386/Command.o' for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Иногда я также получаю эту ошибку:

Bus error: 10

Обратите внимание, что связываемый файл (в данном случае Command.o) не является детерминированным, а всегда находится в пределах 5 строк от одной и той же области (около 250-й строки) списка в stepmania/Xcode/build/stepmania.build/Debug/stepmania.build/Objects-normal/i386/StepMania (Debug).LinkFileList из 400 связываемых файлов.

Согласно /usr/include/sys/errno.h, 24 – это слишком много открытых файлов (в процессе, а не в масштабе всей системы, что равно 23).

Ограничение может быть установлено для оболочки и ее дочерних элементов с помощью ulimit -n. Увеличить можно только рутом. Итак, как корень:

$ <long clang++ command from above>
ld: can't open file, errno=24 file '/Users/nilbus/stepmania/Xcode/build/stepmania.build/Debug/stepmania.build/Objects-normal/i386/Command.o' for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
$ ulimit -n
2560
$ ulimit -n 10000
$ ulimit -n
10000
$ <long clang++ command from above>
ld: can't open file, errno=24 file '/Users/nilbus/stepmania/Xcode/build/stepmania.build/Debug/stepmania.build/Objects-normal/i386/Command.o' for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Настройка ulimit должна применяться к дочерним процессам, и это, безусловно, относится к подоболочкам. Однако увеличение предела файлового дескриптора не влияет на сообщаемое

Делаю ли я какие-то неверные предположения? Что я могу сделать, чтобы выяснить, что может быть фактическим источником этой проблемы?

Чтобы попытаться воспроизвести:


person Edward Anderson    schedule 18.10.2014    source источник


Ответы (1)


Оказывается, проблема была связана с тем, что исходный каталог находился в файловой системе encfs. После переноса проекта из файловой системы encfs в мою основную файловую систему сборка прошла успешно.

person Edward Anderson    schedule 20.10.2014