当前位置: 首页 > 工具软件 > Clam Win > 使用案例 >

linux scons链接库,错误链接器C + +的Linux Scons:CLAM项目

易弘亮
2023-12-01

>== Linking UserTutorial1

>/usr/local/lib/libclam_core.so: undefined reference to `dlclose'

>/usr/local/lib/libclam_core.so: undefined reference to `dlsym'

>/usr/local/lib/libclam_core.so: undefined reference to `dlopen'

>/usr/local/lib/libclam_core.so: undefined reference to `dlerror'

>/usr/local/lib/libclam_core.so: undefined reference to `dladdr'

>collect2: error: ld returned 1 exit status

>scons: *** [UserTutorial1] Error 1

>scons: building terminated because of errors.

有没有人可以帮我解决这个问题。我应当怎样更改下面SConstruct所示:

>## #!/usr/bin/python

>import os

>import glob

>import sys

>options = Variables('options.cache', ARGUMENTS)

>options.Add(PathVariable('clam_prefix', 'The prefix where CLAM was installed', ''))

>options.Add(BoolVariable('verbose', 'Display the full command line instead a short command >description', 'no'))

>options.Add(BoolVariable('crossmingw', 'Enables MinGW crosscompilation from linux', 'no'))

>def scanFiles(pattern, paths) :

> files = []

> for path in paths :

> files+=glob.glob(path+"/"+pattern)

> return files

>def recursiveDirs(root) :

> return filter((lambda a : a.rfind(".svn")==-1), [ a[0] for a in os.walk(root)] )

>def unique(list) :

> return dict.fromkeys(list).keys()

>toolchain = 'default'

>if sys.platform == "win32" : toolchain = 'mingw'

>env = Environment(tools=[toolchain], options=options)

>options.Save('options.cache', env)

>#TODO: This didn't work for dynamic linking

>def renameEmbededFileSymbols(source, target, env) :

> """ Remove the path part of the symbol name for the embeded file"""

> objdumpOutput=os.popen("objdump -x %s | grep _binary'.*'start"%target[0] , "r").read()

> startSymbol=objdumpOutput.split()[-1]

> infix = startSymbol[len('_binary_'):-len("_start")]

> baseName = os.path.split(str(source[0]))[-1]

> newInfix = infix[-len(baseName):]

> return Execute("objcopy %(target)s "

> "--redefine-sym _binary_%(infix)s_start=_binary_%(newInfix)s_start "

> "--redefine-sym _binary_%(infix)s_end=_binary_%(newInfix)s_end "

> "--redefine-sym _binary_%(infix)s_size=_binary_%(newInfix)s_size " % {

> "infix": infix,

> "newInfix": newInfix,

> "target": target[0],

> }

> )

>"""

>embededFileBuilder = Builder(

> action=Action([

> ["ld", "-fPIC", "--shared", "-b", "binary", "-o", "$TARGET", "$SOURCE"],

> renameEmbededFileSymbols,

> ],

> ),

> suffix='.os',

> )

>env['BUILDERS']['EmbededFile']=embededFileBuilder

>"""

>env.SConsignFile() # Single signature file

>crosscompiling=env['crossmingw']

>CLAMInstallDir = env['clam_prefix']

>clam_sconstoolspath = os.path.join(CLAMInstallDir,'share','clam','sconstools')

>env.Tool('clam', toolpath=[clam_sconstoolspath])

>env.Tool('qt4', toolpath=[clam_sconstoolspath])

>if crosscompiling :

> env.Tool('crossmingw', toolpath=[clam_sconstoolspath])

>env.AppendUnique(ASFLAGS='-I. ')

>env['CXXFILESUFFIX'] = '.cxx'

>env['QT4_UICDECLSUFFIX'] = '.hxx'

>env.moveIntermediateInto('generated')

>env.activateColorCommandLine()

>if not env['verbose']: env.ClamQuietCompilation()

>env.EnableClamModules(libs=[

> 'clam_core',

> 'clam_audioio',

> 'clam_processing',

> ], path=CLAMInstallDir)

>env.EnableQt4Modules([

> 'QtCore',

> 'QtGui',

> 'QtOpenGL',

># 'QtSql',

># 'QtNetwork',

># 'QtTest',

># 'QtXml',

># 'QtSvg',

># 'QtUiTools',

># 'QtDesigner',

># 'Qt3Support',

> ], debug=False,

> crosscompiling=crosscompiling,

> )

>sourcePaths = []

>extraPaths = [

> CLAMInstallDir+'/include',

> CLAMInstallDir+'/include/CLAM', # KLUDGE to keep old style includes

>]

>includePaths = sourcePaths + extraPaths

>sources = scanFiles('*.cxx', sourcePaths)

>sources = unique(sources)

>singleSourceExamples = [

> "WritingProcessings.cxx",

> "NetworkPersistence_example.cxx",

> "NetworkUsage_example.cxx",

> "AudioFileReading_example.cxx",

> "AudioFileWriting_example.cxx",

> "AudioIOExample.cxx",

># "Configurators_example.cxx", # QT4Port

> "DescriptorComputation_example.cxx",

> "FDFilterExample.cxx",

> "FFT_example.cxx",

> "FileInfo_example.cxx",

> "FilePlayback_example.cxx",

> "FundamentalDetect.cxx",

> "LPCAnalysis_example.cxx", # TODO FLTK Dependencies -> Qt4

> "Midi2XmlExample.cxx",

> "MIDIFileReadWriteExample.cxx",

> "MIDIIOExample.cxx",

> "MIDIOut_example.cxx",

> "MIDI_Synthesizer_example.cxx",

> "NetworkPersistence_example.cxx",

> "NetworkUsage_example.cxx",

> "OfflineAudioConvolution.cxx",

> "PersistenceThroughDTs_example.cxx",

> "POCompositeExample.cxx",

> "SimplePortsUsage_example.cxx",

> "ProcessingLifeCycle_example.cxx",

> "ProcessingObject_controls_example.cxx",

> "SDIF_And_Segment_example.cxx", # TODO: FLTK Dependencies

> "Spectrum_example.cxx",

> "StereoToMonoFile.cxx",

># "ThreadedProcessing_example.cxx", # TODO: Depends on Resample and FLTK

> "Tutorial/UserTutorial1.cxx",

> "Tutorial/UserTutorial2.cxx",

> "Tutorial/UserTutorial3.cxx",

> "Tutorial/UserTutorial4.cxx",

> "Tutorial/UserTutorial5.cxx",

> "Tutorial/UserTutorial6.cxx",

>]

>directoryBasedExamples = [

> "PortsAndControlsUsageExample",

> "ControlArrayExamples",

> "Wav2SDIF",

> "SDIF2Wav",

> "SDIF2WavStreaming",

>]

>directoryBasedLibraries = [

># "PluginExamples/ClamLadspaPluginExample",

> "PluginExamples/ClamNativePluginExample",

>]

>singleSourceLibraries = [

>]

>env.Append(CPPPATH=includePaths)

>env.AppendUnique(CPPFLAGS=["-g", "-Wall"])

>#env.AppendUnique(DEFINES=["_DEBUG"])

>examples = []

>for libsource in singleSourceLibraries :

> library = os.path.basename(libsource)

> examples += [ env.SharedLibrary(source = libsource) ]

>for folder in directoryBasedLibraries :

> librarySources = glob.glob(folder+"/*.cxx")

># librarySources += [env.EmbededFile(file) for file in glob.glob(folder+"/*.clamnetwork")]

> library = os.path.basename(folder)

> examples += [ env.SharedLibrary(target=library, source = librarySources) ]

>for main in singleSourceExamples :

> executable = os.path.splitext(os.path.basename(main))[0]

> examples += [ env.Program(target=executable, source = sources + [main]) ]

>for folder in directoryBasedExamples :

> exampleSources = glob.glob(folder+"/*.cxx")

> executable = os.path.basename(folder)+"Exe"

> examples += [ env.Program(target=executable, source = sources + exampleSources) ]

>if not crosscompiling :

> # Still having problems crosscompiling aubio

> tickEnv = env.Clone()

> tickEnv.ParseConfig('pkg-config aubio --cflags --libs')

> tickEnv.ParseConfig('pkg-config samplerate --cflags --libs')

> tickSrc = glob.glob("TickExtractor/*cxx")

> examples += [ tickEnv.Program(target="TickExtractorExe", source = tickSrc) ]

>env.Alias('examples',examples)

>env.Default(examples)

2014-11-23

telcom

+0

看起来你缺少libdl。不知道你在哪里添加它。 –

2014-11-23 07:19:21

+0

谢谢;我想是的,但在哪里,我也想知道... –

2014-11-23 07:44:54

+0

设置CPPPATH –

2014-11-23 08:06:36

 类似资料: