我正在尝试编译一个使用udis86库的程序.实际上我正在使用库的用户手册中给出的示例程序.但是在编译时,它会给出错误.我得到的错误是:
example.c:(.text+0x7): undefined reference to 'ud_init'
example.c:(.text+0x7): undefined reference to 'ud_set_input_file'
.
.
example.c:(.text+0x7): undefined reference to 'ud_insn_asm'
Run Code Online (Sandbox Code Playgroud)
我使用的命令是:
$ gcc -ludis86 example.c -o example
Run Code Online (Sandbox Code Playgroud)
按照用户手册中的说明进行操作.
显然,链接器无法链接libudis库.但如果我改变命令:
$ gcc example.c -ludis86 -o example
Run Code Online (Sandbox Code Playgroud)
它开始工作.那么可以请某人解释第一个命令的问题是什么?
我正在尝试编译一个使用sqlite3的C++程序.我正在使用这个makefile:
CXX = g++
CC = gcc
CFLAGS = -c -O2
CXXFLAGS = -Wall -O3 -std=c++11
SQLFLAGS = -DSQLITE_THREADSAFE=0
OUTPUTBIN = bot
OUTPUTDIR = ./bin/
MKDIR = mkdir -p $(OUTPUTDIR)
OBJECTC = sqlite3.o
CSOURCES = sqlite3.c
CXXSOURCES = main.cpp bot.cpp
all: project
project: createdir sql compilecpp
createdir:
$(MKDIR)
sql:
$(CC) $(CSOURCES) $(SQLFLAGS) $(CFLAGS) -o $(OUTPUTDIR)$(OBJECTC)
compilecpp:
$(CXX) $(OUTPUTDIR)$(OBJECTC) $(CXXSOURCES) $(CXXFLAGS) -o $(OUTPUTDIR)$(OUTPUTBIN)
Run Code Online (Sandbox Code Playgroud)
但输出这些错误:
akf@akf-v5 ~/Documents/Proletarian/c++ $ make
mkdir -p ./bin/
gcc sqlite3.c -DSQLITE_THREADSAFE=0 -c -O2 -o ./bin/sqlite3.o
g++ ./bin/sqlite3.o main.cpp …Run Code Online (Sandbox Code Playgroud) 我有一个程序不能与现代GCC一起构建,其输出为:
gcc -I/usr/lib/qt3/include -I/opt/kde3/include/ -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -lqt-mt -ldl -L/usr/lib/qt3/lib64 -o autocheck autocheck.cpp
autocheck.cpp: In function 'int main(int, char**)':
autocheck.cpp:64:62: warning: too many arguments for format
autocheck.cpp:79:79: warning: too many arguments for format
/tmp/ccOFReGf.o: In function `main':
autocheck.cpp:(.text+0x244): undefined reference to `dlopen'
autocheck.cpp:(.text+0x2e1): undefined reference to `dlerror'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我在互联网上搜索了建议,但只找到了将-ldl添加到链接器的建议.但这在这里没有用.我该怎么办?
TL; DR:我正在开展一个dlfcn.h用于打开共享库的C练习.尽管添加(我认为是)基于其他帖子的正确标志,我仍然会收到undefined reference to错误dlopen,dlsym并且在其中定义了一些其他函数dlfcn.h(错误消息和make文件包含在下面).
我在.c文件的开头包括以下内容:#include <dlfcn.h>
我究竟做错了什么?
详细版本:
我正在进行练习30,Learn C The Hard Way并且我很困惑我还需要做什么才能使libex29_tests.c程序(页面上的最后一段代码)正确编译.您可能已经知道,共享库/ makefile /编译器标志对我来说是新的.
到目前为止我尝试过的内容:基于以下帖子,我尝试-ldl通过添加LIBS=-ldl fPIC和/或添加LDFLAGS+=-ldl到Makefile的各个部分来添加标记,但仍然存在问题.书中的makefile版本(包含在下面,作为参考)确实包含一个-ldl标志,尽管语法略有不同.无论如何,我继续得到相同的错误消息.
有什么建议?
这些是我得到的错误.这些错误假定makefile下面包含的版本.但是,正如我所提到的,更改-ldl标志的语法会导致几乎相同的错误消息.
~/.../lchw/ex30_automated$ make
cc -std=gnu99 -g -O2 -Wall -Wextra -Isrc -rdynamic -DNDEBUG -fPIC -c -o src/libex29.o src/libex29.c
src/libex29.c: In function ‘fail_on_purpose’:
src/libex29.c:42:33: warning: unused …Run Code Online (Sandbox Code Playgroud)