আইওএস (আমার ম্যাকবুক এয়ার এবং গিটহাব অ্যাকশন চালক উভয়) উভয়কে লক্ষ্য করার চেষ্টা করার সময় আমার একই সমস্যা হচ্ছে এবং আমি সঠিক সমাধানের পরামর্শ দেওয়ার জন্য অ্যাপলের বাস্তুতন্ত্রের সাথে যথেষ্ট পরিচিত না হলেও এই সমস্যা সম্পর্কে আরও কয়েকটি চিন্তাভাবনা রয়েছে। আসল কমান্ড লাইন সিপিস্পেস্কে সিএমকে থেকে আসছিল, তবে একবার আমি এটি প্রয়োজনীয় জিনিসগুলিতে সিদ্ধ করে ফেলি, এখানে একটি সংক্ষিপ্ত তিরস্কার।
- এতে
cmath-bug.cpp
একমাত্র লাইন দিয়ে ফাইল তৈরি করুন :
#include <cmath>
- চালান (কিছু যুক্তির সামনে নিউলাইনগুলি পড়ার সুবিধার জন্য, সেগুলি সরিয়ে দিন)
clang -v -x c++ -target arm64-apple-ios13.2 -fcolor-diagnostics -std=c++11 -stdlib=libc++
-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk
-isystem /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/include
-c cmath-bug.cpp
আমি যখন এটি চালনা করি, তখন একই সমস্যাটির মুখোমুখি অনেকের সাথে আমি পরিচিত হই:
Apple clang version 11.0.0 (clang-1100.0.33.16)
Target: arm64-apple-ios13.2
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple arm64-apple-ios13.2.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -Werror=implicit-function-declaration -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name cmath-bug.cpp -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -fno-strict-return -masm-verbose -munwind-tables -target-sdk-version=13.2 -target-cpu cyclone -target-feature +fp-armv8 -target-feature +neon -target-feature +crypto -target-feature +zcm -target-feature +zcz -target-feature +sha2 -target-feature +aes -target-abi darwinpcs -fallow-half-arguments-and-returns -dwarf-column-info -debugger-tuning=lldb -ggnu-pubnames -target-linker-version 530 -v -coverage-notes-file /Users/myuser/Projects/C++/cmath-bug.gcno -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk -isystem /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/include -stdlib=libc++ -internal-isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1 -Wno-framework-include-private-from-public -Wno-atimport-in-framework-header -Wno-extra-semi-stmt -Wno-quoted-include-in-framework-header -std=c++11 -fdeprecated-macro -fdebug-compilation-dir /Users/myuser/Projects/C++ -ferror-limit 19 -fmessage-length 204 -stack-protector 1 -fstack-check -mdarwin-stkchk-strong-link -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fobjc-runtime=ios-13.2.0 -fcxx-exceptions -fexceptions -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -o cmath-bug.o -x c++ cmath-bug.cpp
clang -cc1 version 11.0.0 (clang-1100.0.33.16) default target x86_64-apple-darwin19.0.0
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/include/c++/v1"
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/local/include"
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/Library/Frameworks"
ignoring duplicate directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/include"
#include "..." search starts here:
#include <...> search starts here:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/System/Library/Frameworks (framework directory)
End of search list.
In file included from cmath-bug.cpp:1:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:318:9: error: no member named 'signbit' in the global namespace
using ::signbit;
~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:319:9: error: no member named 'fpclassify' in the global namespace
using ::fpclassify;
~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/cmath:320:9: error: no member named 'isfinite' in the global namespace; did you mean 'finite'?
using ::isfinite;
~~^
কেবলমাত্র 2 টিতে আমি আমার মূল কমান্ড লাইনে যে ডিরেক্টরিগুলি দিয়েছি তা অন্তর্ভুক্ত রয়েছে এবং সেগুলি:
$ ls -alF /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk
lrwxr-xr-x 1 root wheel 12B Dec 17 11:54 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk@ -> iPhoneOS.sdk
$ ls -alF /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/include
total 2160
drwxr-xr-x 169 root wheel 5.3K Dec 17 12:07 ./
drwxr-xr-x 5 root wheel 160B Nov 4 19:22 ../
...
-rw-r--r-- 9 root wheel 32K Nov 4 19:52 math.h
...
তবে এখানে আকর্ষণীয় বিটগুলি হ'ল অ-বিদ্যমান অন্তর্ভুক্ত ডিরেক্টরিগুলি পাশাপাশি এটি অন্তর্ভুক্ত ডিরেক্টরিগুলি অন্তর্ভুক্ত রয়েছে এবং শেষ পর্যন্ত তাদের ক্রম অনুসন্ধান করে। আমার ধারণা হ'ল কমান্ড লাইনে উল্লিখিত অতিরিক্ত ডিরেক্টরিগুলি কিছু অ্যাপল-নির্দিষ্ট যুক্তির ভিত্তিতে অ্যাপল ক্ল্যাংয়ের ড্রাইভার inোকানো হয়।
আপনি <cmath>
শিরোনামটি পাওয়া গেছে বলে রিপোর্ট করা ত্রুটি থেকে দেখতে পারেন : /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmath
এবং এর 304 লাইনে আপনি দেখতে পারেন:
#include <__config> // Line 304
#include <math.h> // This one ends up causing troubles
#include <__cxx_version>
একই ফোল্ডারে /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/
এমন একটি ফাইল রয়েছে math.h
যা প্রয়োজনীয় সংজ্ঞা প্রদান করে তা বিচার করে:
#include <__config>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
#include_next <math.h>
#ifdef __cplusplus
// We support including .h headers inside 'extern "C"' contexts, so switch
// back to C++ linkage before including these C++ headers.
extern "C++" {
#include <type_traits>
#include <limits>
// signbit
#ifdef signbit
template <class _A1>
_LIBCPP_INLINE_VISIBILITY
bool
__libcpp_signbit(_A1 __lcpp_x) _NOEXCEPT
{
return signbit(__lcpp_x);
}
#undef signbit
template <class _A1>
inline _LIBCPP_INLINE_VISIBILITY
typename std::enable_if<std::is_floating_point<_A1>::value, bool>::type
signbit(_A1 __lcpp_x) _NOEXCEPT
{
return __libcpp_signbit((typename std::__promote<_A1>::type)__lcpp_x);
}
...
#elif defined(_LIBCPP_MSVCRT)
...
#endif // signbit
লেখকরা <cmath>
প্রত্যাশা করেছিলেন math.h
যে একই ফোল্ডারটি প্রথমে অন্তর্ভুক্ত করা হবে এবং তারপরে #include_next <math.h>
নির্দেশটি সিস্টেম-নির্দিষ্ট সন্ধান করুন math.h
। বাস্তবে যা ঘটছে তা তা নয়।
আপনি যদি অনুসন্ধানের ডিরেক্টরিতে প্রথম 2 টি এন্ট্রি দেখেন:
#include <...> search starts here:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1
আপনি দেখতে পাচ্ছেন যে সিস্টেম-নির্দিষ্ট অন্তর্ভুক্ত ডিরেক্টরিটি ক্ল্যাং-ইনজেকশনের স্ট্যান্ডার্ড লাইব্রেরি ডিরেক্টরি থেকে উপরে চলে আসে, যার কারণে সিস্টেম-সুনির্দিষ্ট সন্ধান math.h
করা হচ্ছে, অন্যান্য স্ট্যান্ডার্ড লাইব্রেরির শিরোনামের মতো একই ফোল্ডারে নেই। সম্ভবত এটি ঘটবে কারণ যদি আমি স্পষ্টভাবে আমার কমান্ড লাইনে স্ট্যান্ডার্ড লাইব্রেরি যুক্ত করি তবে অন্য দুটি ডিরেক্টরি আগে -isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1
সমস্যাটি চলে যায় এবং আমি ফাইলটি সংকলন করতে সক্ষম হয়েছি। এটি ক্ল্যাংয়ের ড্রাইভার বা অন্য যে কোনও কিছু এখানে জড়িত তা স্বয়ংক্রিয়ভাবে করে না: এটি সেই স্ট্যান্ডার্ড লাইব্রেরি ডিরেক্টরিটি যুক্ত করে -internal-system
(নিশ্চিত হয় না যে অভ্যন্তরীণ পতাকাটির শব্দার্থক শব্দগুলি কী) এবং এটি সিস্টেম ডিরেক্টরি পরে এটি যুক্ত করে।
এখন আপনি যদি অবহেলিত ডিরেক্টরিগুলির তালিকাটি দেখুন তবে সেই তালিকার প্রথম প্রবেশটি হ'ল:
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk/usr/include/c++/v1"
যার মধ্যে পিছনে থাকা c++/v1
অংশটি আমার মেশিনে বিদ্যমান নেই, তা আমাকে অবাক করে দিয়েছিল যে আইফোন এসডিকে ইনস্টলেশনটি পুরো জিনিসটি কাজ করতে ডিরেক্টরিতে c++
নির্দেশ করার পথে বিদ্যমান অংশের ভিতরে একটি প্রতীকী লিঙ্ক তৈরি করার কথা ছিল কিনা /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++
।
যাইহোক, আমি যা মনে করি এটি ঘটছে এবং আমি অবাক হয়েছি যে কেউ কীভাবে সঠিকভাবে এটি ঠিক করতে জানেন?
ধন্যবাদ!
প্রসঙ্গে পিএস:
$ xcode-select -p
/Applications/Xcode.app/Contents/Developer
$ xcrun --show-sdk-path -sdk iphoneos13.2
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.2.sdk
xcode-select -p
ম্যাচে যেখানে Xcode অবস্থিত? আপনি কিusing std::signbit;
অন্যদের জন্যও কোডটি পরিবর্তন করতে পারবেন ? আপনি কি সি ++ 11 বা তার পরে সংকলন করছেন?