提问人:Vivek Mangal 提问时间:2/2/2023 最后编辑:Vivek Mangal 更新时间:2/3/2023 访问量:40
C++ - mac中的传递链接不起作用
C++ - Transitive linking in mac not working
问:
因此,我正在我的 Mac 上构建一个 c++ executable()。 取决于我正在构建的目标。为了定位,我正在链接一个静态库,并进一步依赖于静态。exe
Xcode
exe
frmwrk
Framework
frmwrk
libA
libA
libB
exe
-> frmwrk
-> libA
-> libB
我正在使用我的 .但是,我在构建我的 .它无法从 中找到符号。但是,它能够从 libA 中找到符号。libA
libB
exe
exe
libB
看起来符号只在里面可见,在外面不可见。有没有办法向链接到的人公开符号。在 中,我们可以选择指定依赖项,但我在 Xcode 中找不到。libB
frmwrk
libB
frmwrk
CMake
PUBLIC/PRIVATE
我调试了几个小时,但找不到任何解决方案。谁能帮忙?
这是我的链接器命令frmwrk
Ld /Users/vmangal/my/project/BuildResults/bin/Frameworks/Debug/Intel_64_libcpp/frmwrk.framework/Versions/A/frmwrk normal (in target 'myfrm_Debug' from project 'Project')
cd /Users/vmangal/my/project/Build/Toolkit/Mac
-filelist
/Users/vmangal/my/project/BuildResults/obj/myfrm/myfrm.build/Default/myfrm_Debug.build/Objects-normal/x86_64/frmwrk.LinkFileList -exported_symbols_list
/Users/vmangal/my/project/BuildResults/obj/myfrm/myfrm.build/Default/myfrm_Debug.build/DerivedSources/myfrm.exp -install_name u/executable_path/../Frameworks/frmwrk.framework/Versions/A/frmwrk -dead_strip -Xlinker -object_path_lto -Xlinker
/Users/vmangal/my/project/BuildResults/obj/myfrm/myfrm_Debug/myfrm.build/Default/myfrm_Debug.build/Objects-normal/x86_64/frmwrk_lto.o
-Xlinker -no_deduplicate -stdlib\=libc++ -fobjc-link-runtime -Xlinker -search_paths_first -lz -single_module -lPDCore -Xlinker -no_data_in_code_info
***Here is linking libA***
/Users/vmangal/my/project/pdfl_to_t5_approach_4/pdfTools/adobe/BuildResults/lib/debug/pdflib/Intel_libcpp/libA.a
-framework System -framework AppKit -framework QuickLook -Xlinker -no_adhoc_codesign -compatibility_version 1 -current_version 1 -Xlinker -dependency_info -Xlinker /Users/vmangal/my/project/obj/myfrm/myfrm_Debug/myfrm.build/Default/myfrm_Debug.build/Objects-normal/x86_64/frmwrk_dependency_info.dat -o /Users/vmangal/my/project/BuildResults/bin/Frameworks/Debug/Intel_64_libcpp/frmwrk.framework/Versions/A/frmwrk
下面是exe
Ld /Users/vmangal/my/project/project/mac/debug/exe.app/Contents/MacOS/exe normal (in target 'exe.Debug' from project 'exe.mp')
cd /Users/vmangal/my/project/project/mac
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -target x86_64-apple-macos10.15 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.1.sdk
-L/Users/vmangal/my/project/project/mac/debug -L..
-L../../../../../../../../../usr/lib
-F/Users/vmangal/my/project/project/mac/debug
-F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks
-F/Users/vmangal/my/project/Public/Libraries/Mac/intel_64_libcpp/debug
-filelist
/Users/vmangal/my/project/project/mac/build/exe.mp.build/exe.Debug.build/Objects-normal/x86_64/exe.LinkFileList -Xlinker -no_pie -Xlinker -rpath -Xlinker u/executable_path/../Frameworks -Xlinker -object_path_lto -Xlinker
/Users/vmangal/my/project/project/mac/build/exe_SDK.mp.build/exe_SDK.Debug.build/Objects-normal/x86_64/exe_SDK_lto.o -Xlinker -no_deduplicate -stdlib\=libc++ -Wl,-keep_dwarf_unwind -Wl,-no_compact_unwind -Wl,-no_data_in_code_info -Wl,-no_function_starts -framework CoreServices -framework ApplicationServices -framework Foundation -framework AppKit
***Here is linking frmwrk***
-framework frmwrk
-lxml2.2 -lz.1 -Xlinker -no_adhoc_codesign -Xlinker -dependency_info -Xlinker
/Users/vmangal/my/project/project/mac/build/exe_SDK.mp.build/exe_SDK.Debug.build/Objects-normal/x86_64/exe_SDK_dependency_info.dat -o /Users/vmangal/my/project/project/mac/debug/exe_SDK.app/Contents/MacOS/exe
这是 的创建命令:libA
Libtool /Users/vmangal/my/project/BuildResults/lib/debug/Intel_libcpp/libA.a normal (in target 'libA_debug_libcpp' from project 'Cos')
cd /Users/vmangal/my/project/Build/Cos/Mac
export MACOSX_DEPLOYMENT_TARGET\=10.15
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool -static -arch_only x86_64 -D -syslibroot
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.1.sdk
-L/Users/vmangal/my/project/BuildResults/lib/debug/pdflib/Intel_libcpp -filelist
/Users/vmangal/my/project/BuildResults/obj/Cos/libA_debug_libcpp/Cos.build/Default/libA_debug_libcpp.build/Objects-normal/x86_64/Cos.LinkFileList
***Here is linking libB***
/Users/vmangal/my/project/t5/xcode/build/Debug/libB.a
-dependency_info /Users/vmangal/my/project/pBuildResults/obj/Cos/libA_debug_libcpp/Cos.build/Default/libA_debug_libcpp.build/Objects-normal/x86_64/Cos_libtool_dependency_info.dat -o /Users/vmangal/my/project/BuildResults/lib/debug/Intel_libcpp/libA.a
我添加了有问题的链接器命令。
我添加了 Here is linking 标签以显示我的库在命令中出现的位置。
链接的顺序如下:exe
-> frmwrk
-> libA
-> libB
此外,当我运行命令时,我可以看到链接器抱怨的所有符号。nm
frmwrk
答: 暂无答案
评论