#a.c b.c
#more a.c
#include <stdio.h>
int main()
{
b();
return 0;
}
#more b.c
#include <stdio.h>
int b()
{
printf("b\n");
return 0;
}
#gcc -shared -fpic b.c -libb.so
#ls
a.c b.c libb.so
#gcc -static a.c -o t -L. -lb
/usr/bin/ld:can not find -ld
怎么办呢?我想把系统库和libb.so都放到t里面去。
19 个解决方案
#1
-lbb
-static 去掉
-static 去掉
#2
去掉就不能把系统库放进去了。有什么方法可以把系统库都放进可执行文件里了?现在我在redhat4下编译,我的目的是省得到其它系统(redhat5,6)下还要编译。
#3
怎么让程序不依赖系统库呢?
#4
你没有静态库用-static有啥用
#5
如果你只想依赖libb.so
那么
gcc -static a.c -o t -L. libb.so
那么
gcc -static a.c -o t -L. libb.so
#6
#gcc -static a.c -o t -L. -lb
/usr/bin/ld:can not find -ld
怎么办呢?我想把系统库(linux-gate.so.1 => (0xb78bf000)
/etc/libcwait.so (0xb78ba000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7744000)
/lib/ld-linux.so.2 (0xb78c0000)
)和libb.so都放到t里面去。
/usr/bin/ld:can not find -ld
怎么办呢?我想把系统库(linux-gate.so.1 => (0xb78bf000)
/etc/libcwait.so (0xb78ba000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7744000)
/lib/ld-linux.so.2 (0xb78c0000)
)和libb.so都放到t里面去。
#7
make dist好像也不行。怎么办呢
#8
###################项目路径和程序名称#################################
DIR=$(shell pwd)
BIN_DIR=$(DIR)/bin
LIB_DIR=$(DIR)/lib
SRC_DIR=$(DIR)/src
INCLUDE_DIR=$(DIR)/include
OBJ_DIR=$(DIR)/obj
DEPS_DIR=$(DIR)/deps
PROGRAM=$(BIN_DIR)/test
###################OBJ文件及路径############################################
EXTENSION=cpp
OBJS=$(patsubst $(SRC_DIR)/%.$(EXTENSION), $(OBJ_DIR)/%.o,$(wildcard $(SRC_DIR)/*.$(EXTENSION)))
DEPS=$(patsubst $(OBJ_DIR)/%.o, $(DEPS_DIR)/%.d, $(OBJS))
###################include头文件路径##################################
INCLUDE=\
-I$(INCLUDE_DIR)
###################lib文件及路径######################################
###################编译选项及编译器###################################
CC=g++
CFLAGS=-Wall -W -g
LDFLAGS=
###################编译目标###########################################
.PHONY: all clean rebuild
all:$(OBJS)
@echo $(DEPS_DIR)
$(CC) -o $(PROGRAM) $(OBJS) $(LDFLAGS)
$(DEPS_DIR)/%.d: $(SRC_DIR)/%.$(EXTENSION)
$(CC) -MM $(INCLUDE) $(CFLAGS) $< | sed -e 1's,^,$(OBJ_DIR)/,' > $@
sinclude $(DEPS)
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.$(EXTENSION)
$(CC) $< -o $@ -c $(CFLAGS) $(INCLUDE)
rebuild: clean all
clean:
rm -rf $(OBJS) $(PROGRAM)
一个通用的MakeFile模板。
DIR=$(shell pwd)
BIN_DIR=$(DIR)/bin
LIB_DIR=$(DIR)/lib
SRC_DIR=$(DIR)/src
INCLUDE_DIR=$(DIR)/include
OBJ_DIR=$(DIR)/obj
DEPS_DIR=$(DIR)/deps
PROGRAM=$(BIN_DIR)/test
###################OBJ文件及路径############################################
EXTENSION=cpp
OBJS=$(patsubst $(SRC_DIR)/%.$(EXTENSION), $(OBJ_DIR)/%.o,$(wildcard $(SRC_DIR)/*.$(EXTENSION)))
DEPS=$(patsubst $(OBJ_DIR)/%.o, $(DEPS_DIR)/%.d, $(OBJS))
###################include头文件路径##################################
INCLUDE=\
-I$(INCLUDE_DIR)
###################lib文件及路径######################################
###################编译选项及编译器###################################
CC=g++
CFLAGS=-Wall -W -g
LDFLAGS=
###################编译目标###########################################
.PHONY: all clean rebuild
all:$(OBJS)
@echo $(DEPS_DIR)
$(CC) -o $(PROGRAM) $(OBJS) $(LDFLAGS)
$(DEPS_DIR)/%.d: $(SRC_DIR)/%.$(EXTENSION)
$(CC) -MM $(INCLUDE) $(CFLAGS) $< | sed -e 1's,^,$(OBJ_DIR)/,' > $@
sinclude $(DEPS)
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.$(EXTENSION)
$(CC) $< -o $@ -c $(CFLAGS) $(INCLUDE)
rebuild: clean all
clean:
rm -rf $(OBJS) $(PROGRAM)
一个通用的MakeFile模板。
#9
LZ的意思是想将系统动态库中的代码静态链接到你的文件中去??
#10
对,还有我自己写的动态库,如这里的libb.so。有方法吗?
#11
有办法或者没有办法
有办法的前提是你有这些东西的所有静态库
有办法的前提是你有这些东西的所有静态库
#12
你的意思是动态库.so改成静态库.a吗?
#ar cr libb.a b.c
#ranlib libb.a
#gcc -static a.c -o t -L. -lb
./libb.a: could not read symbols: Archive has no index; run ranlib to add one
collect2: ld returned 1 exit status
怎么办呢?
#ar cr libb.a b.c
#ranlib libb.a
#gcc -static a.c -o t -L. -lb
./libb.a: could not read symbols: Archive has no index; run ranlib to add one
collect2: ld returned 1 exit status
怎么办呢?
#13
好了,
#ar cr libb.a b.c
改成:
#gcc -c b.c -o b.o
#ar cr libb.a b.o
去实验下
#ar cr libb.a b.c
改成:
#gcc -c b.c -o b.o
#ar cr libb.a b.o
去实验下
#14
没发现什么问题,可是看不到生成的t 里面是什么东西,加了-static,会包含系统库吗?
#15
如果你系统库也有静态库,那么也会一起链接进入
#16
加了-static 生成的文件比不加的大了近100倍,里面什么东东?
#17
里面有系统动态库吗?怎么分析gcc -static 生成的文件呢?求助啊
#18
动态链接库的创建分为两步:
编译目标文件,必须带上-fpic 标志,使输出的对象模块是按照可重定位地址方式生成的
gcc -c -fpic b.c –o b.o
将加入动态库的目标文件合并在一起,必须带上-shared ,明确表示是动态链接库
gcc -shared b.o -o libb.so
两步可以合并成一步
gcc -fpic -shared b.c -o libb.so
然后是链接库并生成可执行程序
gcc a.c -L. -lb -o t
系统会首选动态链接,没有则选静态链接。
编译目标文件,必须带上-fpic 标志,使输出的对象模块是按照可重定位地址方式生成的
gcc -c -fpic b.c –o b.o
将加入动态库的目标文件合并在一起,必须带上-shared ,明确表示是动态链接库
gcc -shared b.o -o libb.so
两步可以合并成一步
gcc -fpic -shared b.c -o libb.so
然后是链接库并生成可执行程序
gcc a.c -L. -lb -o t
系统会首选动态链接,没有则选静态链接。
#19
还是没把静态库编进去啊
分析gcc -static 生成的文件......?
分析gcc -static 生成的文件......?
#20
#1
-lbb
-static 去掉
-static 去掉
#2
去掉就不能把系统库放进去了。有什么方法可以把系统库都放进可执行文件里了?现在我在redhat4下编译,我的目的是省得到其它系统(redhat5,6)下还要编译。
#3
怎么让程序不依赖系统库呢?
#4
你没有静态库用-static有啥用
#5
如果你只想依赖libb.so
那么
gcc -static a.c -o t -L. libb.so
那么
gcc -static a.c -o t -L. libb.so
#6
#gcc -static a.c -o t -L. -lb
/usr/bin/ld:can not find -ld
怎么办呢?我想把系统库(linux-gate.so.1 => (0xb78bf000)
/etc/libcwait.so (0xb78ba000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7744000)
/lib/ld-linux.so.2 (0xb78c0000)
)和libb.so都放到t里面去。
/usr/bin/ld:can not find -ld
怎么办呢?我想把系统库(linux-gate.so.1 => (0xb78bf000)
/etc/libcwait.so (0xb78ba000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7744000)
/lib/ld-linux.so.2 (0xb78c0000)
)和libb.so都放到t里面去。
#7
make dist好像也不行。怎么办呢
#8
###################项目路径和程序名称#################################
DIR=$(shell pwd)
BIN_DIR=$(DIR)/bin
LIB_DIR=$(DIR)/lib
SRC_DIR=$(DIR)/src
INCLUDE_DIR=$(DIR)/include
OBJ_DIR=$(DIR)/obj
DEPS_DIR=$(DIR)/deps
PROGRAM=$(BIN_DIR)/test
###################OBJ文件及路径############################################
EXTENSION=cpp
OBJS=$(patsubst $(SRC_DIR)/%.$(EXTENSION), $(OBJ_DIR)/%.o,$(wildcard $(SRC_DIR)/*.$(EXTENSION)))
DEPS=$(patsubst $(OBJ_DIR)/%.o, $(DEPS_DIR)/%.d, $(OBJS))
###################include头文件路径##################################
INCLUDE=\
-I$(INCLUDE_DIR)
###################lib文件及路径######################################
###################编译选项及编译器###################################
CC=g++
CFLAGS=-Wall -W -g
LDFLAGS=
###################编译目标###########################################
.PHONY: all clean rebuild
all:$(OBJS)
@echo $(DEPS_DIR)
$(CC) -o $(PROGRAM) $(OBJS) $(LDFLAGS)
$(DEPS_DIR)/%.d: $(SRC_DIR)/%.$(EXTENSION)
$(CC) -MM $(INCLUDE) $(CFLAGS) $< | sed -e 1's,^,$(OBJ_DIR)/,' > $@
sinclude $(DEPS)
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.$(EXTENSION)
$(CC) $< -o $@ -c $(CFLAGS) $(INCLUDE)
rebuild: clean all
clean:
rm -rf $(OBJS) $(PROGRAM)
一个通用的MakeFile模板。
DIR=$(shell pwd)
BIN_DIR=$(DIR)/bin
LIB_DIR=$(DIR)/lib
SRC_DIR=$(DIR)/src
INCLUDE_DIR=$(DIR)/include
OBJ_DIR=$(DIR)/obj
DEPS_DIR=$(DIR)/deps
PROGRAM=$(BIN_DIR)/test
###################OBJ文件及路径############################################
EXTENSION=cpp
OBJS=$(patsubst $(SRC_DIR)/%.$(EXTENSION), $(OBJ_DIR)/%.o,$(wildcard $(SRC_DIR)/*.$(EXTENSION)))
DEPS=$(patsubst $(OBJ_DIR)/%.o, $(DEPS_DIR)/%.d, $(OBJS))
###################include头文件路径##################################
INCLUDE=\
-I$(INCLUDE_DIR)
###################lib文件及路径######################################
###################编译选项及编译器###################################
CC=g++
CFLAGS=-Wall -W -g
LDFLAGS=
###################编译目标###########################################
.PHONY: all clean rebuild
all:$(OBJS)
@echo $(DEPS_DIR)
$(CC) -o $(PROGRAM) $(OBJS) $(LDFLAGS)
$(DEPS_DIR)/%.d: $(SRC_DIR)/%.$(EXTENSION)
$(CC) -MM $(INCLUDE) $(CFLAGS) $< | sed -e 1's,^,$(OBJ_DIR)/,' > $@
sinclude $(DEPS)
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.$(EXTENSION)
$(CC) $< -o $@ -c $(CFLAGS) $(INCLUDE)
rebuild: clean all
clean:
rm -rf $(OBJS) $(PROGRAM)
一个通用的MakeFile模板。
#9
LZ的意思是想将系统动态库中的代码静态链接到你的文件中去??
#10
对,还有我自己写的动态库,如这里的libb.so。有方法吗?
#11
有办法或者没有办法
有办法的前提是你有这些东西的所有静态库
有办法的前提是你有这些东西的所有静态库
#12
你的意思是动态库.so改成静态库.a吗?
#ar cr libb.a b.c
#ranlib libb.a
#gcc -static a.c -o t -L. -lb
./libb.a: could not read symbols: Archive has no index; run ranlib to add one
collect2: ld returned 1 exit status
怎么办呢?
#ar cr libb.a b.c
#ranlib libb.a
#gcc -static a.c -o t -L. -lb
./libb.a: could not read symbols: Archive has no index; run ranlib to add one
collect2: ld returned 1 exit status
怎么办呢?
#13
好了,
#ar cr libb.a b.c
改成:
#gcc -c b.c -o b.o
#ar cr libb.a b.o
去实验下
#ar cr libb.a b.c
改成:
#gcc -c b.c -o b.o
#ar cr libb.a b.o
去实验下
#14
没发现什么问题,可是看不到生成的t 里面是什么东西,加了-static,会包含系统库吗?
#15
如果你系统库也有静态库,那么也会一起链接进入
#16
加了-static 生成的文件比不加的大了近100倍,里面什么东东?
#17
里面有系统动态库吗?怎么分析gcc -static 生成的文件呢?求助啊
#18
动态链接库的创建分为两步:
编译目标文件,必须带上-fpic 标志,使输出的对象模块是按照可重定位地址方式生成的
gcc -c -fpic b.c –o b.o
将加入动态库的目标文件合并在一起,必须带上-shared ,明确表示是动态链接库
gcc -shared b.o -o libb.so
两步可以合并成一步
gcc -fpic -shared b.c -o libb.so
然后是链接库并生成可执行程序
gcc a.c -L. -lb -o t
系统会首选动态链接,没有则选静态链接。
编译目标文件,必须带上-fpic 标志,使输出的对象模块是按照可重定位地址方式生成的
gcc -c -fpic b.c –o b.o
将加入动态库的目标文件合并在一起,必须带上-shared ,明确表示是动态链接库
gcc -shared b.o -o libb.so
两步可以合并成一步
gcc -fpic -shared b.c -o libb.so
然后是链接库并生成可执行程序
gcc a.c -L. -lb -o t
系统会首选动态链接,没有则选静态链接。
#19
还是没把静态库编进去啊
分析gcc -static 生成的文件......?
分析gcc -static 生成的文件......?