qmake没有找到一些现有的库

当我在Qt Creator(在Linux Ubuntu上使用qmake + GCC)中包含两个库(不是由我制作)到我的(纯C)项目时,我遇到了问题。

我知道,要包含一个lib,可以使用LIBS指令,如本SO答案所述 ; 我已经成功地在Linux和Windows中以这种方式插入了库。 更重要的是,在同样有问题的项目中,我有两个成功插入的库。

但是现在我遇到了一个问题,包括同一个项目中的另外两个库。 其中一个库是C6RUN,两个处理器之间的对话需要,在库的文件夹中有一个/bin和一个/lib文件夹; 第一个文件没有扩展名(它们不是.a或.lib),而第二个文件夹在两个子文件夹中有一组.a。 另一个库位于一个带有/lib子文件夹的文件夹中,里面有.lib。 他们都在Eclipse的一个项目中100%工作(所以没有涉及qmake / Qt Creator)。 我提到了第一个库的/bin文件夹,因为在与基于Eclipse的项目相关的Makefile中,尽管不是正式的库文件,但它们引用了两个文件。

当尝试链接.pro中的两个库时,我总是做同样的事情:使用-L添加路径,使用-L添加lib的名称。 当我尝试使用这两个库时,会发生错误。 以下是带有动作+结果的列表(实际上我甚至试过了其他一些选项,但没有一个结果与下面显示的两个不同):

首先是lib 1

的.pro

 LIBS += -L$${COMMON_PATH}/linux-devkit/c6run/lib/c6run_dsp -llibc6run 

结果

 error: connot find -llibc6run 

首先是lib 2

的.pro

 LIBS += -L$${COMMON_PATH}/linux-devkit/c6run/lib/c6run_dsp -lc6run 

结果

 compiles fine. when calling a respective method inside main.cpp / int main(): error: undefined reference of  

第一个lib 3

的.pro

 LIBS += -L$${COMMON_PATH}/linux-devkit/c6run/bin -lc6runlib-ar 

结果

 error: connot find -lc6runlib-ar 

第二个lib 1

的.pro

 LIBS += -L$${RE8K_REPO}/main_projects/lib_calc_dsp/lib -lcalculos 

结果

 error: connot find -lcalculos 

第二个lib 2

的.pro

 LIBS += -L$${RE8K_REPO}/main_projects/lib_calc_dsp/lib/calculos.lib 

结果

 compiles fine. when calling a respective method inside main.cpp / int main(): error: undefined reference of  

那么,我能错过什么?

这是另一个Makefile,用于编译在同一个项目中成功使用的库:

Calculos Makefile

 # ---------------------------------------------------------------------------- # Name of the ARM GCC cross compiler & archiver # ---------------------------------------------------------------------------- ARM_TOOLCHAIN_PREFIX = arm-arago-linux-gnueabi- ARM_TOOLCHAIN_PATH = /re8k/linux-devkit ARM_CC := $(ARM_TOOLCHAIN_PATH)/bin/$(ARM_TOOLCHAIN_PREFIX)gcc ARM_AR := $(ARM_TOOLCHAIN_PATH)/bin/$(ARM_TOOLCHAIN_PREFIX)ar # Get any compiler flags from the environment ARM_CFLAGS = $(CFLAGS) ARM_CFLAGS += -std=gnu99 \ -Wdeclaration-after-statement -Wall -Wno-trigraphs \ -fno-strict-aliasing -fno-common -fno-omit-frame-pointer \ -c -O3 ARM_LDFLAGS = $(LDFLAGS) ARM_LDFLAGS+=-lm -lpthread ARM_ARFLAGS = rcs # ---------------------------------------------------------------------------- # Name of the DSP C6RUN compiler & archiver # TI C6RunLib Frontend (if path variable provided, use it, otherwise assume # the tools are in the path) # ---------------------------------------------------------------------------- C6RUN_TOOLCHAIN_PREFIX = c6runlib- C6RUN_TOOLCHAIN_PATH = $(ARM_TOOLCHAIN_PATH)/c6run C6RUN_CC := $(C6RUN_TOOLCHAIN_PATH)/bin/$(C6RUN_TOOLCHAIN_PREFIX)cc C6RUN_AR := $(C6RUN_TOOLCHAIN_PATH)/bin/$(C6RUN_TOOLCHAIN_PREFIX)ar C6RUN_CFLAGS = -c -mt -O3 C6RUN_ARFLAGS = rcs # ---------------------------------------------------------------------------- # List of lib source files # ---------------------------------------------------------------------------- LIB_SRCS := calculos.c LIB_DSP_OBJS := $(LIB_SRCS:%.c=dsp_obj/%.o) LIB_OBJS := $(LIB_DSP_OBJS:%.o=%.lib) all: dsp_obj/.created $(C6RUN_CC) $(C6RUN_CFLAGS) -o $(LIB_DSP_OBJS) $(LIB_SRCS) -DUSE_DSP; $(C6RUN_AR) $(C6RUN_ARFLAGS) $(LIB_OBJS) $(LIB_DSP_OBJS); all_host: dsp_obj/.created gcc -c -o $(LIB_DSP_OBJS) $(LIB_SRCS); ar rcs $(LIB_OBJS) $(LIB_DSP_OBJS); dsp_obj/.created: @mkdir -p dsp_obj @touch dsp_obj/.created clean: rm -rf dsp_obj; distclean: clean 

其他Makefile

 include Makerules.mk export PATH := $(TGT_GCC_PATH):$(PATH) printversions: @echo FWVersion: ${FIRWMARE_VERSION} @echo BuildTag: ${BUILDTAG} @echo dev_lib: make -f ../build/MakeDevLib.mk -I./ all tgt_lib: make -f ../build/MakeTgtLib.mk -I./ all all: printversions tgt_lib dev_lib install: tgt_lib dev_lib @mkdir -p ../../common/lib cp lib/libhal* ../../common/lib @mkdir -p ../../common/include @rm ../../common/include/hal -rf cp src/hal ../../common/include/ -r clean: make -f ../build/MakeDevLib.mk -I./ clean make -f ../build/MakeTgtLib.mk -I./ clean @rm lib -rf 

Makerules.mk

 BUILDTAG = $(shell svn info -r 'HEAD' | grep Revision: | egrep -o "[0-9]+") #Or: BUILDTAG = $(shell svn info -r 'HEAD' ) or: BUILDTAG = $(shell svnversion) FIRWMARE_VERSION = $(shell cat lib_version.txt)-$(shell date --iso) TGT_LINUX_INCLUDE_DIR = $(shell cat ../../host_cfg/linux-tgt-include-dir.txt) ### TOOL CHAIN ### CC=cc AR=ar STRIP=strip TGT_GCC_PATH = $(shell cat ../../host_cfg/gcc-tgt-path.txt) TGT_CC= arm-arago-linux-gnueabi-gcc TGT_AR= arm-arago-linux-gnueabi-ar TGT_STRIP= arm-arago-linux-gnueabi-strip TGT_LD= arm-arago-linux-gnueabi-ld ### SOURCES ### SOURCE_FOLDER = src SRC_DIRS = \ src/comm \ src TEST_SRC_DIRS = \ test/mocks \ test/comm \ test ### PROJECT ### TARGET = hal ### TEST FRAMEWORK ### CPPUTEST_HOME = ../../common/CppUTest ### C FLAGS ### ALL_CCPPFLAGS = -Isrc -I ../../common/include -D AUTO_GEN_BUILD_TAG='"${BUILDTAG}"' -D AUTO_GEN_FIRWMARE_VERSION='"${FIRWMARE_VERSION}"' -g -fPIC -I../../kernel/packages/linux/include ALL_CONLYFLAGS = -std=gnu99 ALL_CPPONLYFLAGS = TEST_CFLAGS = -I$(CPPUTEST_HOME)/include/ -D SYSTEM_UNIT_TEST -D DEBUG DEV_CCPPFLAGS = -D DEV TGT_CCPPFLAGS = -D TGT -I $(TGT_LINUX_INCLUDE_DIR) ### LINKER LIBS AND FLAGS ### DEV_STATIC_LIBS = TGT_STATIC_LIBS = #DEV_TEST_STATIC_LIBS = ../../common/lib/libchelper-dev-test.a #TGT_TEST_STATIC_LIBS = ../../common/lib/libchelper-tgt-test.a DEV_SHARED_LIBS_PATH = DEV_SHARED_LIBS = -lzmq -lm -lpthread TGT_SHARED_LIBS_PATH = -L ../../../../sdcard_files/defaultFiles/lib TGT_SHARED_LIBS = -lzmq -lm -lpthread DEV_LDFLAGS = TGT_LDFLAGS = 

我从来没有见过.lib的Linux库。 这是微软的事情。 你确定calculos.lib是一个有效的Linux库吗?

您还可以使用ar命令检查您期望的对象是否在库中。 例如:

 ar t mylib.a 

对我来说听起来像你试图使用的lib不是在计算结构的情况下为Linux构建的,或者没有正确导出的符号在你的应用程序中使用。 这些只是一些猜测; 我没有足够的信息继续下去。 🙂