对 xdr_float、...等的未定义引用

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

链接到“rpc”库时遇到问题。我的系统是 OpenSUSE Leap 15.5。这是 shell (Bash) 的输出:

gcc -o build/user/gee/Mautocorr.o -c -O2 -x c -std=gnu11 -Wall -pedantic -fopenmp -Ibuild/include -I/usr/include/cblas build/user/gee/Mautocorr.c
gcc -o build/user/gee/autocorr.o -c -O2 -x c -std=gnu11 -Wall -pedantic -fopenmp -Ibuild/include -I/usr/include/cblas build/user/gee/autocorr.c
gcc -o build/user/gee/compress.o -c -O2 -x c -std=gnu11 -Wall -pedantic -fopenmp -Ibuild/include -I/usr/include/cblas build/user/gee/compress.c
gcc -o build/user/gee/sfautocorr -pthread -fopenmp build/user/gee/Mautocorr.o build/user/gee/autocorr.o build/user/gee/compress.o -Lbuild/lib -lrsf -lm -lblas -lcblas -llapack -lcblas -lgomp -lfftw3f -lfftw3 -lfftw3f_threads -lfftw3_threads
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: build/lib/librsf.a(file.o): in function `sf_complexwrite':
file.c:(.text+0x1a54): undefined reference to `xdr_float'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: file.c:(.text+0x1a6b): undefined reference to `xdr_vector'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: build/lib/librsf.a(file.o): in function `sf_complexread':
file.c:(.text+0x1bf2): undefined reference to `xdr_float'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: file.c:(.text+0x1c09): undefined reference to `xdr_vector'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: build/lib/librsf.a(file.o): in function `sf_charwrite':
file.c:(.text+0x1dc1): undefined reference to `xdr_opaque'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: build/lib/librsf.a(file.o): in function `sf_ucharwrite':
file.c:(.text+0x1f71): undefined reference to `xdr_opaque'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: build/lib/librsf.a(file.o): in function `sf_charread':
file.c:(.text+0x20ca): undefined reference to `xdr_opaque'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: build/lib/librsf.a(file.o): in function `sf_ucharread':
file.c:(.text+0x22ca): undefined reference to `xdr_opaque'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: build/lib/librsf.a(file.o): in function `sf_intwrite':
file.c:(.text+0x250c): undefined reference to `xdr_int'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: file.c:(.text+0x2523): undefined reference to `xdr_vector'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: build/lib/librsf.a(file.o): in function `sf_intread':
file.c:(.text+0x2684): undefined reference to `xdr_int'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: file.c:(.text+0x269b): undefined reference to `xdr_vector'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: build/lib/librsf.a(file.o): in function `sf_shortread':
file.c:(.text+0x2804): undefined reference to `xdr_int'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: file.c:(.text+0x281a): undefined reference to `xdr_vector'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: build/lib/librsf.a(file.o): in function `sf_longread':
file.c:(.text+0x2984): undefined reference to `xdr_int'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: file.c:(.text+0x299b): undefined reference to `xdr_vector'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: build/lib/librsf.a(file.o): in function `sf_shortwrite':
file.c:(.text+0x2bdc): undefined reference to `xdr_int'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: file.c:(.text+0x2bf2): undefined reference to `xdr_vector'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: build/lib/librsf.a(file.o): in function `sf_floatwrite':
file.c:(.text+0x2e3c): undefined reference to `xdr_float'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: file.c:(.text+0x2e53): undefined reference to `xdr_vector'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: build/lib/librsf.a(file.o): in function `sf_floatread':
file.c:(.text+0x2fb4): undefined reference to `xdr_float'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: file.c:(.text+0x2fcb): undefined reference to `xdr_vector'
/usr/lib64/gcc/x86_64-suse-linux/7/../../../../x86_64-suse-linux/bin/ld: build/lib/librsf.a(file.o): in function `sf_setform':
file.c:(.text+0x81a): undefined reference to `xdrmem_create'
collect2: error: ld returned 1 exit status
scons: *** [build/user/gee/sfautocorr] Error 1
scons: building terminated because of errors.
make: *** [Makefile:7: install] Error 2

我正在从 reproducibility.org 编译 Madagascar 软件。完成配置,安装依赖项,开始编译过程。但是“build/user/gee”中的配置文件似乎有问题。配置文件如下:

import os, sys, re, string
sys.path.append('../../framework')
import bldutil

progs = '''
autocorr burstnoise cconv conflict conv convf cpef1 cube deburst decon despike despike2 factorm factorn frame hconv heat3 helicon hole hpef idempatch imospray invbin invbin1 invrec1 kolmog levint light lopef losignoi lpef make maskinv misif miss miss1 msmiss mspef nhelicon npef parcel pefdeburst pfactor2 qdome randline sigmoid signoi splinebank splineplane streamissh synmarine syntop tentwt tspline ungrad velcon3 wavemovie wilson
'''

try:  # distributed version
    Import('env root pkgdir bindir libdir incdir')
    env = env.Clone()
except: # local version
    env = bldutil.Debug()
    root = None
    SConscript('../pwd/SConstruct')

src = Glob('[a-z]*.c')

dynpre = env.get('DYNLIB','') 

libs = [dynpre+'rsf']+env.get('LIBS',[])
dlibs = ['drsf']+env.get('LIBS',[])

env.Prepend(CPPPATH=['../../include'],
            LIBPATH=['../../lib'],
            LIBS=['libtirpc'])

dynlib = ('-static-intel' not in env.get('LINKFLAGS',''))

objects = []
dobjects = []
includes = []
for source in src:
    inc = env.RSF_Include(source,prefix='')
    obj = env.StaticObject(source)
    env.Ignore(inc,inc)
    env.Depends(obj,inc)

    objects.append(obj)
    includes.append(inc)

    if dynlib:
        obj = env.SharedObject(source)
        env.Depends(obj,inc)
        dobjects.append(obj)
        
lib = env.StaticLibrary('rsfgee',objects)
inc = env.Command('rsfgee.h',includes,Action(bldutil.__merge))

env.Install('../../lib',lib)
env.Install('../../include',inc)

if root:
    env.Install(libdir,lib)
    env.Install(incdir,inc)

if dynlib:
    dlib = env.SharedLibrary('rsfgee',dobjects,SHLIBPREFIX='libd',LIBS=dlibs)
    env.Install('../../lib',dlib)
    if root:
        install = env.Install(libdir,dlib)

        if dynpre and env['PLATFORM'] == 'darwin':
            env.AddPostAction(install,
            '%s -change build/api/c/libdrsf.dylib '
            '%s/libdrsf.dylib %s' % \
            (WhereIs('install_name_tool'),libdir,install[0]))


mains = Split(progs)
for prog in mains:
    sources = ['M' + prog]
    bldutil.depends(env,sources,'M'+prog)
    env.StaticObject('M'+prog+'.c')
    prog = env.Program(prog,[x + '.o' for x in sources],LIBS=libs)
    if root:
        env.Install(bindir,prog)

        if dynpre and env['PLATFORM'] == 'darwin':
            env.AddPostAction(install,
            '%s -change build/api/c/libdrsf.dylib '
            '%s/libdrsf.dylib %s' % \
            (WhereIs('install_name_tool'),libdir,install[0]))

######################################################################
# SELF-DOCUMENTATION
######################################################################
if root:
    user = os.path.basename(os.getcwd())
    main = 'sf%s.py' % user
    
    docs = [env.Doc(prog,'M' + prog) for prog in mains]
    env.Depends(docs,'#/framework/rsf/doc.py')  
    doc = env.RSF_Docmerge(main,docs)
    env.Install(pkgdir,doc)

其他目录中的其他配置文件也存在该问题。通过在 'env.Prepend' 行中将 'libtirpc' 添加到 'LIBS=[]' 中,到目前为止已经解决了问题。

请以简单的方式询问任何必要的信息!

别嫌我无能,我不是程序员!谢谢!

linux compiler-errors scons
1个回答
0
投票

在Makefile中的gcc命令行中添加tirpc库:

   gcc -o build/..... -ltirpc

您必须找到并更改该文件。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.