QMAKE没有找到一些现有的库(qmake not finding some existing li

2019-10-20 22:14发布

包括两个库(不是我做的)到Qt Creator中我的(纯C)项目(使用QMAKE + GCC在Linux操作系统Ubuntu)时,我有一个问题。

我知道,包括一个lib,一个使用LIBS在解释指令该SO回答 ; 我已经成功插入无论是在Linux和Windows中这样的库。 更有甚者,在这同一问题的项目,我有两个成功插入库。

但现在我有包括本同一项目这另外两个库的问题。 这其中一个库是C6RUN,两个处理器之间的谈话要求,而图书馆的文件夹,里面有一个/bin/lib的文件夹; 第一有没有扩展名某些文件(它们不是某或.LIB),而第二有,内部的两个子文件夹,一组.A的。 其他文库是具有一个文件夹内/lib内部具有的.lib子目录。 他们两人都在Eclipse项目的工作100%(所以没有QMAKE / Qt Creator的参与)。 我提到的/bin ,因为涉及到基于Eclipse的项目尽管不是正式的库文件它的两个文件的引用一个Makefile的第一个库的文件夹中。

当试图对两个库中的.pro链接,我做同样的事情一如既往:添加具有路径-L加上的lib的名称-l 。 当我尝试这样做,与这两个库,发生错误。 下面是用行动+结果(其实我试过,甚至一些其他的选择,但没有任何结果从下面所示的两个是不同的)名单:

首先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 <method name>

首先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 <method name>

那么,有什么事情我会丢失?

下面是用来编译成功地在同一个项目中使用的库的另一个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     =

Answer 1:

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

您还可以检查使用ar命令来查看,如果你希望的对象都在库。 例如:

ar t mylib.a

这听起来像你对我试图使用要么未在的情况下,为Linux建立了库calculos或不具备正常出口在你的应用程序中使用的符号。 这些都只是一些猜测; 我没有足够的信息去。 :)



文章来源: qmake not finding some existing libraries