Несовместимые библиотеки при попытке скомпилировать программу я записал

Я не носитель языка, но я буду стараться изо всех сил на английском языке.

Для самодельной программы мне нужны некоторые библиотеки (которые являются от кого-то еще). На моем первом Linux ПК это работало, но теперь на этом ПК он не работает. Я устанавливаю программы с sudo make, и библиотеки копируются в /usr/local/lib/.

Теперь я пытаюсь скомпилировать свою программу с g++ -g -o cv countvertices.c -lQuantim4 -lm -ltiff -lPSgraf3 и это говорит:

/usr/bin/ld: skipping incompatible /usr/local/lib/libQuantim4.a when searching for -lQuantim4
/usr/bin/ld: cannot find -lQuantim4
/usr/bin/ld: skipping incompatible /usr/local/lib/libPSgraf3.a when searching for -lPSgraf3
/usr/bin/ld: cannot find -lPSgraf3
collect2: ld gab 1 als Ende-Status zurück

Я искал немного об этом сообщении об ошибке, и похоже, что это имеет некоторое отношение 32/64-bit к версиям. Процессор является Athlon AMD (TM) процессор II X2 215 × 2. Я установил Ubuntu 11.10. настольная версия (i386) с установщиком Windows wubi. Таким образом, теперь у меня есть версия на 32 бита Ubuntu.

У кого-то есть идея, как решить эту проблему? Или есть ли способ видеть, являются ли библиотеки 32 битами или 64 битами?


Спасибо за Ваш ответ, steabert.

Архитектура библиотеки является x86_64. Но я думал, выполняю ли я make-файл, соответствующая архитектура была бы создана. Make-файл для Quantim4 похож на это:

# make
#
#
#  Quantim library (version 2.0)
#
NAME   = libQuantim4
#
VPATH = /usr/include
#
CC = g++
#
#  source files
#
CFILES = SavePaletteImage.c SaveShiftImage.c SetFrame.c StretchHisto.c bAddition.c bContour.c bErode.c bLogAnd.c bLogOr.c bObjects.c gBibin.c gBin.c gBilevel.c gBinTwoLevel.c gErode.c b2DEuler.c pDisector.c BtdErode.c BtdErodeFilter.c BtdOpen.c  BtdContinuity.c SetBtdShell.c  DLine.c bContourCent.c  RGBtoGray.c  StretchRGBHisto.c StretchRGBBright.c ran3.c  GetRandDDDImage.c  CreateDDDImage.c gDiff.c error.c DddMinMax.c DddBin.c DddClas.c BtdEuler.c DddHisto.c DddCircHisto.c DddEulerFunc.c psPlot.c psDddCircHisto.c qdefault.c GetCorDDDImage.c grf3.c GetDddGreyCdf.c psMultiPlot.c gLaplace.c gSobel.c gHisto.c psHisto.c bThinning.c  bConCom.c bHitMiss.c  DddResRed.c GetDddAcov.c gRedRes.c BtdVolSurf.c BtdSkelet.c BtdDiffusionZ.c BtdEuler26.c BtdEuler6.c BtdMeancurv.c BtdQuant.c BtdSurfdens.c BtdVoldens.c GetAcov.c GetCorImage.c  GetGreyCdf.c MinMaxf.c gConfunc.c bConCom2.c gCircMask.c bRemObjects.c GetCorDDDImage2.c Btd2Ddd.c grf2ext.c GetSemiVar.c psMultiPlotTit.c psPlotTit.c utils.c GetVoronoiTes.c GetPercolClus.c bQuant.c bEuler4.c bEuler8.c bLengthdens.c bSurfdens.c bVoldens.c bAverageCurvature.c DddBibin.c gHistoMatch.c rgb-utils.c BtdQuantMask.c bQuantMask.c bQuantRecMask.c  bErodeMark.c bGetDistMap.c BtdDrawSphere.c BtdErodeMir.c BtdGetDistMap.c BtdGetDistOpenMap.c DDD2Dx.c DddDrawCylinder.c DddWaterShed.c gWaterShed.c SetDddShell.c bErodeMir.c bErodeMirCirc.c bGetDistOpenMap.c bThinning8.c BtdGetDistOpenMapDouble.c BtdErodeMirDouble.c ps3Dview.c GetRandImage.c files.c pixelrw.c transforms.c filters.c mathmorph.c bGetFullDistMap.c evaluations.c binarization.c Erode_Open.c greyscale.c minkowski.c binimages.c CircMask.c bConLength.c\
    ${NULL}
# 
#  compiler flags 
# 
CFLAGS = -O3 -w -r -L/usr/lib -L ~/local/lib -I ~/local/include 
#
#  rules 
# 
SRCFILES = $(CFILES)  
OBJFILES = $(CFILES:%.c=../bin/%.o) 

$(NAME): compile createLibrary;

compile: $(OBJFILES) 
#   touch emptyfile
#   $(CC) -o $@ $(CFLAGS) $(OBJFILES) -ltiff -lm

$(OBJFILES): ../bin/%.o: %.c
    $(CC) -c $(CFLAGS) $< -o $@
createLibrary:
    ar r libQuantim4.a $(OBJFILES) 
    ranlib libQuantim4.a
    cp libQuantim4.a /usr/local/lib/libQuantim4.a
    cp quantim4.h /usr/local/include/
clean:
    rm -f ../bin/*.o

Если я работаю, это с "sudo делает", почему я получаю x86_64 библиотеку, когда у меня на самом деле есть i386?


Журнал, когда я пытаюсь скомпилировать как обычный пользователь:

make | tee build.log
ar: creating libQuantim4.a
ar r libQuantim4.a ../bin/SavePaletteImage.o ../bin/SaveShiftImage.o ../bin/SetFrame.o ../bin/StretchHisto.o ../bin/bAddition.o ../bin/bContour.o ../bin/bErode.o ../bin/bLogAnd.o ../bin/bLogOr.o ../bin/bObjects.o ../bin/gBibin.o ../bin/gBin.o ../bin/gBilevel.o ../bin/gBinTwoLevel.o ../bin/gErode.o ../bin/b2DEuler.o ../bin/pDisector.o ../bin/BtdErode.o ../bin/BtdErodeFilter.o ../bin/BtdOpen.o ../bin/BtdContinuity.o ../bin/SetBtdShell.o ../bin/DLine.o ../bin/bContourCent.o ../bin/RGBtoGray.o ../bin/StretchRGBHisto.o ../bin/StretchRGBBright.o ../bin/ran3.o ../bin/GetRandDDDImage.o ../bin/CreateDDDImage.o ../bin/gDiff.o ../bin/error.o ../bin/DddMinMax.o ../bin/DddBin.o ../bin/DddClas.o ../bin/BtdEuler.o ../bin/DddHisto.o ../bin/DddCircHisto.o ../bin/DddEulerFunc.o ../bin/psPlot.o ../bin/psDddCircHisto.o ../bin/qdefault.o ../bin/GetCorDDDImage.o ../bin/grf3.o ../bin/GetDddGreyCdf.o ../bin/psMultiPlot.o ../bin/gLaplace.o ../bin/gSobel.o ../bin/gHisto.o ../bin/psHisto.o ../bin/bThinning.o ../bin/bConCom.o ../bin/bHitMiss.o ../bin/DddResRed.o ../bin/GetDddAcov.o ../bin/gRedRes.o ../bin/BtdVolSurf.o ../bin/BtdSkelet.o ../bin/BtdDiffusionZ.o ../bin/BtdEuler26.o ../bin/BtdEuler6.o ../bin/BtdMeancurv.o ../bin/BtdQuant.o ../bin/BtdSurfdens.o ../bin/BtdVoldens.o ../bin/GetAcov.o ../bin/GetCorImage.o ../bin/GetGreyCdf.o ../bin/MinMaxf.o ../bin/gConfunc.o ../bin/bConCom2.o ../bin/gCircMask.o ../bin/bRemObjects.o ../bin/GetCorDDDImage2.o ../bin/Btd2Ddd.o ../bin/grf2ext.o ../bin/GetSemiVar.o ../bin/psMultiPlotTit.o ../bin/psPlotTit.o ../bin/utils.o ../bin/GetVoronoiTes.o ../bin/GetPercolClus.o ../bin/bQuant.o ../bin/bEuler4.o ../bin/bEuler8.o ../bin/bLengthdens.o ../bin/bSurfdens.o ../bin/bVoldens.o ../bin/bAverageCurvature.o ../bin/DddBibin.o ../bin/gHistoMatch.o ../bin/rgb-utils.o ../bin/BtdQuantMask.o ../bin/bQuantMask.o ../bin/bQuantRecMask.o ../bin/bErodeMark.o ../bin/bGetDistMap.o ../bin/BtdDrawSphere.o ../bin/BtdErodeMir.o ../bin/BtdGetDistMap.o ../bin/BtdGetDistOpenMap.o ../bin/DDD2Dx.o ../bin/DddDrawCylinder.o ../bin/DddWaterShed.o ../bin/gWaterShed.o ../bin/SetDddShell.o ../bin/bErodeMir.o ../bin/bErodeMirCirc.o ../bin/bGetDistOpenMap.o ../bin/bThinning8.o ../bin/BtdGetDistOpenMapDouble.o ../bin/BtdErodeMirDouble.o ../bin/ps3Dview.o ../bin/GetRandImage.o ../bin/files.o ../bin/pixelrw.o ../bin/transforms.o ../bin/filters.o ../bin/mathmorph.o ../bin/bGetFullDistMap.o ../bin/evaluations.o ../bin/binarization.o ../bin/Erode_Open.o ../bin/greyscale.o ../bin/minkowski.o ../bin/binimages.o ../bin/CircMask.o ../bin/bConLength.o  
ranlib libQuantim4.a
cp libQuantim4.a /usr/local/lib/libQuantim4.a
cp: reguläre Datei „/usr/local/lib/libQuantim4.a“ kann nicht angelegt werden: Keine Berechtigung
make: *** [createLibrary] Fehler 1

Содержание build.log:

ar r libQuantim4.a ../bin/SavePaletteImage.o ../bin/SaveShiftImage.o ../bin/SetFrame.o ../bin/StretchHisto.o ../bin/bAddition.o ../bin/bContour.o ../bin/bErode.o ../bin/bLogAnd.o ../bin/bLogOr.o ../bin/bObjects.o ../bin/gBibin.o ../bin/gBin.o ../bin/gBilevel.o ../bin/gBinTwoLevel.o ../bin/gErode.o ../bin/b2DEuler.o ../bin/pDisector.o ../bin/BtdErode.o ../bin/BtdErodeFilter.o ../bin/BtdOpen.o ../bin/BtdContinuity.o ../bin/SetBtdShell.o ../bin/DLine.o ../bin/bContourCent.o ../bin/RGBtoGray.o ../bin/StretchRGBHisto.o ../bin/StretchRGBBright.o ../bin/ran3.o ../bin/GetRandDDDImage.o ../bin/CreateDDDImage.o ../bin/gDiff.o ../bin/error.o ../bin/DddMinMax.o ../bin/DddBin.o ../bin/DddClas.o ../bin/BtdEuler.o ../bin/DddHisto.o ../bin/DddCircHisto.o ../bin/DddEulerFunc.o ../bin/psPlot.o ../bin/psDddCircHisto.o ../bin/qdefault.o ../bin/GetCorDDDImage.o ../bin/grf3.o ../bin/GetDddGreyCdf.o ../bin/psMultiPlot.o ../bin/gLaplace.o ../bin/gSobel.o ../bin/gHisto.o ../bin/psHisto.o ../bin/bThinning.o ../bin/bConCom.o ../bin/bHitMiss.o ../bin/DddResRed.o ../bin/GetDddAcov.o ../bin/gRedRes.o ../bin/BtdVolSurf.o ../bin/BtdSkelet.o ../bin/BtdDiffusionZ.o ../bin/BtdEuler26.o ../bin/BtdEuler6.o ../bin/BtdMeancurv.o ../bin/BtdQuant.o ../bin/BtdSurfdens.o ../bin/BtdVoldens.o ../bin/GetAcov.o ../bin/GetCorImage.o ../bin/GetGreyCdf.o ../bin/MinMaxf.o ../bin/gConfunc.o ../bin/bConCom2.o ../bin/gCircMask.o ../bin/bRemObjects.o ../bin/GetCorDDDImage2.o ../bin/Btd2Ddd.o ../bin/grf2ext.o ../bin/GetSemiVar.o ../bin/psMultiPlotTit.o ../bin/psPlotTit.o ../bin/utils.o ../bin/GetVoronoiTes.o ../bin/GetPercolClus.o ../bin/bQuant.o ../bin/bEuler4.o ../bin/bEuler8.o ../bin/bLengthdens.o ../bin/bSurfdens.o ../bin/bVoldens.o ../bin/bAverageCurvature.o ../bin/DddBibin.o ../bin/gHistoMatch.o ../bin/rgb-utils.o ../bin/BtdQuantMask.o ../bin/bQuantMask.o ../bin/bQuantRecMask.o ../bin/bErodeMark.o ../bin/bGetDistMap.o ../bin/BtdDrawSphere.o ../bin/BtdErodeMir.o ../bin/BtdGetDistMap.o ../bin/BtdGetDistOpenMap.o ../bin/DDD2Dx.o ../bin/DddDrawCylinder.o ../bin/DddWaterShed.o ../bin/gWaterShed.o ../bin/SetDddShell.o ../bin/bErodeMir.o ../bin/bErodeMirCirc.o ../bin/bGetDistOpenMap.o ../bin/bThinning8.o ../bin/BtdGetDistOpenMapDouble.o ../bin/BtdErodeMirDouble.o ../bin/ps3Dview.o ../bin/GetRandImage.o ../bin/files.o ../bin/pixelrw.o ../bin/transforms.o ../bin/filters.o ../bin/mathmorph.o ../bin/bGetFullDistMap.o ../bin/evaluations.o ../bin/binarization.o ../bin/Erode_Open.o ../bin/greyscale.o ../bin/minkowski.o ../bin/binimages.o ../bin/CircMask.o ../bin/bConLength.o  
ranlib libQuantim4.a
cp libQuantim4.a /usr/local/lib/libQuantim4.a

Архитектура библиотеки:

objdump -a /usr/local/lib/libQuantim4.a
In archive /usr/local/lib/libQuantim4.a:

SavePaletteImage.o:     file format elf64-x86-64
rw------- 1000/1000   4248 Jan 16 21:33 2011 SavePaletteImage.o


SaveShiftImage.o:     file format elf64-x86-64
rw------- 1000/1000   2280 Jan 16 21:33 2011 SaveShiftImage.o
...

Но подождите, x86 32-разрядные средства, правильно? И i386 также является 32-разрядным. Таким образом, где проблема?

1
задан 20 January 2012 в 16:57

2 ответа

Я наконец решил проблему установкой Ubuntu 11.10. amd64, хотя хотелось бы, чтобы был лучший способ ...

0
ответ дан 20 January 2012 в 16:57

Чтобы выяснить, для какой архитектуры был скомпилирован архив библиотеки, выполните команду

$ objdump -a /usr/local/lib/libQuantim4.a

. Целевая архитектура архива библиотеки должна соответствовать архитектуре объектных файлов, которые вы создаете при компиляции. Ваши опции:

  1. Получить файлы библиотеки для правильной архитектуры или перекомпилировать библиотеку.
  2. Кросс-компиляция для той же архитектуры, что и ваша библиотека.

Второй вариант потребует наличия всех необходимых библиотек в целевой архитектуре (например, libc), и полученный код не будет работать под этой установкой Ubuntu. Поэтому, если мы хотим запустить его под Ubuntu i386, я выбрал бы первый вариант.

Если целевая архитектура библиотеки - x86_64, и вы не можете получить библиотеку для i386, вы можете установить Ubuntu 64bit.

0
ответ дан 20 January 2012 в 16:57

Другие вопросы по тегам:

Похожие вопросы: