包括两个库(不是我做的)到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 =