我正在尝试编译一个名为randfold的程序来处理RNA折叠.但是在此期间sudo make,我收到了以下有关c程序的消息.
params.o: In function `scale_parameters':
params.c:(.text+0x160): undefined reference to `log'
params.c:(.text+0x1bc): undefined reference to `log'
fold.o: In function `HairpinE':
fold.c:(.text+0x3981): undefined reference to `log'
fold.o: In function `LoopEnergy':
fold.c:(.text+0x3bd3): undefined reference to `log'
fold.c:(.text+0x3dfa): undefined reference to `log'
fold.o:fold.c:(.text+0x4f81): more undefined references to `log' follow
collect2: ld returned 1 exit status
make: *** [randfold] Error 1
Run Code Online (Sandbox Code Playgroud)
这些错误可能是什么原因?
我有以下Makefile:
TOP = ../Bank/src
CC = gcc
CFLAGS = -g -Wall -std=c99
LDFLAGS = -L$(TOP)
LFLAGS = -lVirtualBank
INCLUDES = -I$(TOP)/VirtualBank/
LIBS = VirtualBank.a
BANK_SOURCES = $(TOP)/bank.c
VirtualBank_SOURCES = $(TOP)/VirtualBank/bankServer.c $(TOP)/VirtualBank/dataBase.c $(TOP)/VirtualBank/account.c
BANK_OBJECTS = $(BANK_SOURCES:.c=.o)
VirtualBank_OBJECTS = $(VirtualBank_SOURCES:.c=.o)
TARGET = bank
all: VirtualBank.a $(TARGET)
VirtualBank.a:$(VirtualBank_OBJECTS)
rm -f $@
ar cq $@ $(VirtualBank_OBJECTS)
mv *.a $(TOP)/
$(VirtualBank_OBJECTS):$(VirtualBank_SOURCES)
$(CC) -c $(CFLAGS) $(INCLUDES) $(VirtualBank_SOURCES)
mv *.o $(TOP)/VirtualBank/
$(TARGET):$(BANK_OBJECTS)
$(CC) $(CFLAGS) $(INCLUDES) $(BANK_OBJECTS) -o $(TARGET) $(LDFLAGS) $(LFLAGS)
chmod +x $(TARGET)
$(BANK_OBJECTS):$(BANK_SOURCES)
$(CC) $(CFLAGS) -c …Run Code Online (Sandbox Code Playgroud) 我有一个具有这种命令的Makefile:
browserify:
rm -rf ./dist
mkdir dist
# Browserify
echo -n "/* ${NPM_PACKAGE} ${NPM_VERSION} ${GITHUB_PROJ} */" \
> dist/pica.js
Run Code Online (Sandbox Code Playgroud)
因此,当我这样做时make browserify,应该将注释输出到文件顶部而不是\n.但由于某些原因......输出看起来像这样
-n /* package 0.0.0 */
...more things...
Run Code Online (Sandbox Code Playgroud)
我在osx上使用zsh.
在构建具有递归依赖性的库时,我有这个片段:
$(LIBRARY) : $(OBJECTS) | $(LIBDIR) # objects is all the obj/*.o
$(AR) ...
obj/%.o : %.cpp obj/%.d
$(CC) ...
build : $(DEPENDENCIES) $(LIBRARY)
$(DEPENDENCIES):
$(MAKE) -C $(ROOT)/$@
Run Code Online (Sandbox Code Playgroud)
如果我跑,这是有效的make.一切按照正确的顺序按预期构建.但是如果我运行make -jN,那么库会以错误的顺序构建,因为我实际上没有设置任何依赖性排序规则,这会导致许多未定义的引用.
如果我添加规则:
$(OBJECTS) : $(DEPENDENCIES)
Run Code Online (Sandbox Code Playgroud)
然后运行make每次重建每个库,无论更改(DEPENDENCIES是假的,但我不明白为什么它实际上重建了一切).如何在不必每次重建所有内容的情况下为并行构建强制执行正确的排序?
首先,这是一个编程任务,所以你知道.
无论如何,我想要做的是包括我写的共享库(来自前一个项目的链表)和我自己编写的shell.我发现的问题是,当我使用我的Makfile编译时,编译成功.然后当我尝试运行我的可执行文件时(让我们说它叫做prog),我得到以下内容:
[terminal]# ./prog
./prog: error while loading shared libraries: libmylib.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
以下是我的文件结构供参考:
include
|_
common.h
List.h
Node.h
lib
|_
libmylib.a
libmylib.so
libsrc
|_
Makefile // This makefile builds the library correctly and puts it in lib via 'make install'
List.c
List.h
Node.c
Node.h
common.h
Makefile
prog.c
Run Code Online (Sandbox Code Playgroud)
这是我的主要Makefile
CC=gcc
CFLAGS=-g -Wall -Llib
LIBS=-lreadline -lncurses -lmylib
PROGS=library prog
all: $(PROGS)
library:
cd libsrc; make install
prog: prog.o
$(CC) $(CFLAGS) -o $@ $< …Run Code Online (Sandbox Code Playgroud) 我去了GNU网站下载make.我去了主GNU FTP服务器选择下载.我选择make-4.1.tar.gz并提取了文件.
我不知道该怎么办,所以我去了从提取文件创建的文件夹,并./configure希望它能做我想做的事情.我还不确定它做了什么.
当我从命令行运行make它说make: command not found.我是否正确下载make以及如何将其make作为命令查看?
我在Windows上.
我正在尝试设置一个makefile来编译一个相当迟缓的程序的多个段.为了做到这一点,我希望Makefile能够一次传递MULTIPLE调试标志所以我可以一起测试多个不同的函数集.
所以在我的Makefile中:
debug:
gcc -Wall -O -o my_malloc main.c -D experimental leak <-- SECOND FLAG
./my_malloc
Run Code Online (Sandbox Code Playgroud)
在我的C代码中我想做:
#ifdef experimental
printf("MALLOC PROGRAM IN DEBUGGING MODE\n");
#endif
//executing both conditionals at once in one line.
#ifdef leak
puts("TESTING LEAK DETECTION");
#endif
Run Code Online (Sandbox Code Playgroud) 我在Makefile中遇到了这行代码.我已经尽力找到解释但却无法解释.如果你有线索,有人可以通过提示吗?特别是,这个Makefile句子中的符号%=是什么意思.
ifndef VARA
VARB := $(CURDIR:/Dev/home/ajhome/%=/home/%)
export VARA:= $(VARB)
endif
Run Code Online (Sandbox Code Playgroud)
提前欣赏很多.
这可能是makefile错误的重复:主Makefile中的main或Undefined引用的未定义引用或其他一些引用.crc64和getWord都支持mainProg文件,其中包含我的main函数.当我尝试运行我的make文件时,我收到以下有关crc64.o规则的编译错误.在c文件中,我有在这篇文章中列出的include语句和头文件在C中创建自己的头文件所以我不应该有与链接头到主体相关的链接错误.
错误:
gcc -g -Wall -std=c99 crc64.o -o crc64
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o: In function ``_start':
(.text+0x20): undefined reference to ``main'
collect2: error: ld returned 1 exit status
Makefile
CC=gcc
COPTS=-g -Wall -std=c99
ALL=crc64 getWord mainProg
all: $(ALL)
crc64: crc64.o
$(CC) $(COPTS) $^ -o $@
getWord: getWord.o
$(CC) $(COPTS) $^ -o $@
mainProg: getWord.o crc64.o mainProg.o
$(CC) $(COPTS) $^ -o $@
crc64.o: crc64.c crc64.h
getWord.o: getWord.c getWord.h
mainProg.o: mainProg.c getWord.h crc64.h …Run Code Online (Sandbox Code Playgroud) 我试图在makefile中的条件中执行命令.
我让它在shell中工作:
if [ -z "$(ls -A mydir)" ]; then \
echo "empty dir"; \
else \
echo "non-empty dir"; \
fi
Run Code Online (Sandbox Code Playgroud)
但是如果我在makefile中尝试它,那么"$(ls -A mydir)"无论是否asdf为空都会扩展为空:
all:
if [ -z "$(ls -A mydir)" ]; then \
echo "empty dir"; \
else \
echo "non-empty dir"; \
fi
Run Code Online (Sandbox Code Playgroud)
该ls命令没有像我期望的那样扩展:
$ mkdir mydir
$ make
if [ -z "" ]; then \
echo "empty dir"; \
else \
echo "non-empty dir"; \
fi
empty dir
$ touch …Run Code Online (Sandbox Code Playgroud)