C++ - mac中的传递链接不起作用

C++ - Transitive linking in mac not working

提问人:Vivek Mangal 提问时间:2/2/2023 最后编辑:Vivek Mangal 更新时间:2/3/2023 访问量:40

问:

因此,我正在我的 Mac 上构建一个 c++ executable()。 取决于我正在构建的目标。为了定位,我正在链接一个静态库,并进一步依赖于静态。exeXcodeexefrmwrkFrameworkfrmwrklibAlibAlibB

exe -> frmwrk -> libA -> libB

我正在使用我的 .但是,我在构建我的 .它无法从 中找到符号。但是,它能够从 libA 中找到符号。libAlibBexeexelibB

看起来符号只在里面可见,在外面不可见。有没有办法向链接到的人公开符号。在 中,我们可以选择指定依赖项,但我在 Xcode 中找不到。libBfrmwrklibBfrmwrkCMakePUBLIC/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

此外,当我运行命令时,我可以看到链接器抱怨的所有符号。nmfrmwrk

C++ Xcode 编译器错误 链接器 错误

评论


答: 暂无答案