MacOS x86_64 C/汇编语言文件错误:ld:编译/链接程序集时未找到架构 x86_64 的符号

问题描述 投票:0回答:1

我正在尝试从开源 git 存储库编译此文件:

https://github.com/xcist/main/blob/master/gecatsim/clib_build/src/p_nlog_inline.c

我使用的是 MacOS x86_64 平台。操作系统 v13.4

我可以使用此命令编译该文件而不会出现错误:

g++ -O0 -g -Wall -static -msse -masm=intel -fPIC -c p_nlog_inline.c

使用 MacOS 特定的 Makefile: https://github.com/xcist/main/blob/master/gecatsim/clib_build/MakeMacOS 当我尝试将 .o 文件与其余 .o 文件链接时,出现以下错误:

make -f ../MakeMacOS libcatsim_macos.so
............................................. 
Building system-specific library ..... 
        
g++ -Wall -fPIC -O0 -static-libstdc++ -o libcatsim_macos.so -shared MatVec.o BaseObject.o ClipPlane.o Transformation.o Intersection.o Interpolate.o main.o Photon.o CrossSectionHandler.o Volume.o Detector.o CrossSection.o Phantom.o DD3Proj.o DD3Proj_roi_notrans_mm.o voxelized_projector.o getMemorySize.o negative_log.o gemsfilt.o pd3dbpsemi.o DD2Back.o DD2Proj.o DD2WBack.o DD3WBack.o pd2dbpcurved.o pd2dbpflat.o extractsino.o viewshift.o spline.o xybowtie.o DD2ParProj.o analytic_projector.o rndpoi.o nCAT_main.o fm_gethostid.o fm_getrandpid.o p_nlog_inline.o -fPIC  
        
clang: warning: argument unused during compilation: '-static-libstdc++' [-Wunused-command-line-argument] 
        
    Undefined symbols for architecture x86_64:   
    "_p_nlog_inline", referenced from:
              nlog(float*, float*, int) in negative_log.o   
    "and_mask", referenced from:
              repeat in p_nlog_inline.o   
    "coeff1", referenced from:
              repeat in p_nlog_inline.o   
    "coeff2", referenced from:
              p_nlog_inline(float*, float*, int) in p_nlog_inline.o   
    "coeff3", referenced from:
              repeat in p_nlog_inline.o   
    "coeff4", referenced from:
              p_nlog_inline(float*, float*, int) in p_nlog_inline.o   
    "coeff5", referenced from:
              p_nlog_inline(float*, float*, int) in p_nlog_inline.o   
    "coeff6", referenced from:
              p_nlog_inline(float*, float*, int) in p_nlog_inline.o   
    "coeff7", referenced from:
              repeat in p_nlog_inline.o   
    "coeff8", referenced from:
              repeat in p_nlog_inline.o   
    "exp_mult", referenced from:
              repeat in p_nlog_inline.o   
    "exp_sub", referenced from:
              repeat in p_nlog_inline.o   
    "or_mask", referenced from:
              p_nlog_inline(float*, float*, int) in p_nlog_inline.o 
    ld: symbol(s) not found for architecture x86_64 
    clang: error: linker command failed with exit code 1 (use -v to see invocation) 
    make: *** [libcatsim_macos.so] Error 1

我根据网上的建议尝试了几件事。我已经能够让它编译 .o 文件,但我陷入了这个链接阶段。关于下一步该做什么有什么想法吗?

[更新]:符号在相应的 .h 文件中定义,位于此处:

https://github.com/xcist/main/blob/master/gecatsim/clib_build/src/p_nlog_inline.h

c macos assembly linker-errors
1个回答
0
投票

错误是行:

g++ -Wall -fPIC -O0 -static-libstdc++ -o libcatsim_macos.so -shared MatVec.o BaseObject.o ClipPlane.o Transformation.o Intersection.o Interpolate.o main.o Photon.o CrossSectionHandler.o Volume.o Detector.o CrossSection.o Phantom.o DD3Proj.o DD3Proj_roi_notrans_mm.o voxelized_projector.o getMemorySize.o negative_log.o gemsfilt.o pd3dbpsemi.o DD2Back.o DD2Proj.o DD2WBack.o DD3WBack.o pd2dbpcurved.o pd2dbpflat.o extractsino.o viewshift.o spline.o xybowtie.o DD2ParProj.o analytic_projector.o rndpoi.o nCAT_main.o fm_gethostid.o fm_getrandpid.o p_nlog_inline.o -fPIC  

正确的使用方式是这样的:

gcc -fPIC -somethingElse -c name.c -lXXXXXXXX -lXXXXXX
sudo ld -x --shared -o /lib/XXXXX/XXXXXXXX.so  XXXXXX.o -lXXXXXX -lXXXXXX
© www.soinside.com 2019 - 2024. All rights reserved.