当我尝试编译我的程序时,我有这个错误 undefined reference to `printfHello' 我做了一个简单的程序,有三个文件hello.c,hello1.c和hello.h hello1.c: #include <stdint.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> void printfHello() { printf("Hello"); } hello1.h void printfHello(); 你好ç #include <stdint.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include "hello1.h" int main() { int errn=0; printfHello(); return errn; } 我有一个Makefile.am bin_PROGRAMS = client_ev AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_builddir)/include # $(some_CFLAGS) […]
我有一个具有以下目录结构的项目: Root directory bin/ (for final executable) Mod1/ build/ (for *.o / *.d files) inc/ src/ Mod2/ build/ inc/ src/ Mod…/ (future module directories) build/ inc/ src/ makefile 我目前的makefile包含这个: # Directory naming conventions SRC_DIR_NAME = src BUILD_DIR_NAME = build # Parallel source/object/dependency file lists SRCS = $(shell find -name *.cpp) OBJS = $(subst $(SRC_DIR_NAME),$(BUILD_DIR_NAME),$(SRCS:%.cpp=%.o)) # […]
我有这个makefile: SHELL=/bin/bash COMPILER_VERSION = "Intel 64 Compiler 16.0.0.109 Build 20150815" SOURCES = \ ron1.f \ ron2.f \ ron3.f \ ron4.f OBJECTS = $(SOURCES:.f=.o) TARGET = mylib.a FC = gfortran FFLAGS = -O3 linux: $(TARGET) @echo @echo " " \ ar r $(TARGET) $(OBJECTS) @echo @echo " " \ ranlib $(TARGET) @echo $(TARGET): $(OBJECTS) $(OBJECTS):$(SOURCES) cleanall: […]
himake: hello.o printing.o name.o g++ -o himake hello.o printing.o name.o hello.o: hello.cpp g++ -c hello.cpp printing.o: printing.cpp g++ -c printing.cpp name.o: name.cpp g++ -c name.cpp 运行上面的生成文件给我这个错误如下: [alex @ pcc dir] $ make g ++ -o himake hello.o printing.o name.o hello.o:在函数`main'中: hello.cpp :(。text + 0xc8):对`printHello(std :: basic_string,std :: allocator>)的未定义引用' collect2:ld返回1退出状态 make:*** [himake]错误1 文件:hello.cpp: // hello.cpp // […]
我正在编译这里提供的图书馆: http : //www.robots.ox.ac.uk/~vgg/software/fastann/ ,但 bash-3.2$ PREFIX=/usr/local/ cmake . && make — The C compiler identification is GNU — The CXX compiler identification is GNU -Wall -O2 -g3 -msse2 -march=native -fno-exceptions -fno-rtti — Prefix = /usr/local/ — Configuring done — Generating done — Build files have been written to: /path/to/dir [ 14%] Building CXX object […]
我如何添加setenv LD_LIBRARY_PATH . 进入我的Makefile ? 当我在我的Makefile中使用相同的术语,然后使用echo $LD_LIBRARY_PATH .回显variablesecho $LD_LIBRARY_PATH . 我总是收到. 作为结果即使在另一个文件夹不是绝对path,我收到这个错误setenv LD_LIBRARY_PATH . make: setenv: Command not found ll:libmem.v1 libmem.v1: gcc -g -c -fpic libmem.v1.c -Wall gcc -shared -o libmem.so libmem.v1.o gcc -lmem -L. -o main main.c -Wall setenv LD_LIBRARY_PATH . clean: rm -f libmem.v1 rm -f *.py 我应该如何解决这个问题?
在内核模块makefile中存在obj-mvariables。 考虑以下: CUR = $(shell uname -r) DIR = /lib/modules/$(CUR)/build PWD = $(shell pwd) obj-m := m1.o m2.o default: $(MAKE) -C $(DIR) SUBDIRS=$(PWD) modules 在这个Makefile , default目标包含一个调用kernel sub-make的配方。 obj-mvariables不会被导出到环境中,因此sub-make不能使用它。 但是如果我们删除了obj-mvariables的初始化,那么这个make就不会编译m1和m2内核模块。 所以,问题是: 为什么在这种情况下,内核子制造取决于非导出的obj-mvariables?
背景 我正在处理一个大的Makefile项目,我想整理一下。 它build立了几十个子项目,每个子项目都包含大约100个.cpp和.h文件。 我已经设置好了,以便能够为多种操作系统(Linux,OSX / Mac,QNX等)和多种体系结构( x86/i386 , x64/amd64 , armhf , arm64/aarch64 )构builddebug和release版本。在平行下。 这是因为这是一个庞大的项目,而使其迅速build立的唯一方法是与多个工具链并行。 我有一个主规则,所有项目服从存储中间对象(即: .o文件)在临时目录中时,build设。 那么,build立test.c for Linux,arm64,release模式; 将在当前工作目录的以下子目录中构build目标文件: .tmp/Linux/arm64/release 问题 这个function在我的构build中没有问题,但是使用这个设置,我似乎无法正确使用GCC的预编译头文件(即: .GCH文件)。 用我的设置,我有一个stdafx.h / stdafx.cpp对。 使用GCC,我可以很容易地创build一个stdafx.h.gch文件。 但是,如果该文件与源文件位于相同的path,该项目似乎只使用它(加快构build)。 如果预编译头文件位于中间对象path(即: .tmp/Linux/arm64/release )中,则不会被检测到或使用。 即使我明确地将包含path添加到将包含gch文件的中间对象path,它也会失败。 包括文件名本身的完整path导致它被视为无效的链接器脚本,并被忽略。 所以,我的第一个解决方法是制定一个规则来强制所有OS / arch版本等待在最初的预编译头文件生成,而不是在per-OS / arch基础上构build一个gch 。 但是,如果我使用发布模式设置构buildgch并尝试makedebugging构build,则会收到以下警告: warning: stdafx.h.gch: created with -gnone, but used with -gdwarf-2 首先,我不知道这是否对我的构build造成了严重的后果,其次,不同的操作系统可能会为gch代传递不同的编译时间定义标志,所以这不是“一刀切”的用例就我所知, 题 我该如何解决这个问题,以便预编译的头文件位于$PWD以外的位置,并且可以被GCC检测到? 我目前正在使用gcc […]
我必须修改一个Makefile文件,这样在构build.o.文件之前,扩展名为.cc的中间文件将被移动到.cpp文件中.o. 文件。 我修改的Makefile如下所示。 PROTOC=protoc all: client_grpc pb client_grpc: abc.pb.o abc.grpc.pb.o client_grpc.o $(CXX) $^ $(LDFLAGS) -o $@ pb: %.pb.cc mv $^ $@ %.grpc.pb.cc: %.proto $(PROTOC) –grpc_out=. –plugin=protoc-gen-grpc=$(GRPC_CPP_PLUGIN_PATH) $< %.pb.cc: %.proto $(PROTOC) –cpp_out=. $< clean: rm -f *.o *.pb.cc *.pb.h client_gqegrpc protoc是生成.cc文件的编译器。 如何制作目标,以便在生成.cc文件后移动到.cpp ,然后使用.cpp文件构buildclient_grpc ?
我正在尝试构build一个automake / autoconf构build系统的项目。 这是一个很好用的项目,所以我对configuration脚本,makefile或代码的问题持怀疑态度。 这可能是某种环境,path,标志等问题 – 在我的最后,只需使用正确的参数运行正确的命令即可。 configuration步骤似乎以令人满意的方式完成。 当我运行make时,我显示了一组主要是这些types的错误: error: 'TRUE' undeclared here (not in a function) error: 'struct work' has no member named 'version' error: expected ')' before 'PRIu64' 让我们把重点放在最后一个,我花了时间研究 – 我怀疑所有的错误都与缺less的定义有关。 显然,从C标准库头文件inttypes.h中找不到打印友好的扩展定义。 但是,在configuration步骤中声称所有东西都是按顺序排列的: configure:4930: checking for inttypes.h configure:4930: /usr/bin/x86_64-linux-gnu-gcc -c -g -O2 conftest.c >&5 configure:4930: $? = 0 configure:4930: result: yes 所有的INTTYPES标志设置正确,如果我看在confdefs.h,config.h,config.log输出variables等: HAVE_INTTYPES_H='1' […]