。 现在不是使用gcc编译,不能在命令后面加上-l mysqlclient.是使用的make命令。
make -f Makefile.sample xxxx. 请问如何编辑Makefile.sample来解决这个问题?
问题补充:
main函数大概是这样的
#include "string.h"
#include<stdio.h>
#include<mysql/mysql.h>
MYSQL conn_ptr;
MYSQL_RES * res_ptr;
MYSQL_ROW sqlrow;
int main (int argc, const char** argv)
{
// parseCommandLine (argc, argv);
//mysql
mysql_init(&conn_ptr);
mysql_real_connect(&conn_ptr,"localhost","root","121812","FinanceData",0,NULL,0)
int res = mysql_query(&conn_ptr,"select tpName from Topic");
if(res){printf("select error");}
else {
res_ptr=mysql_use_result(&conn_ptr);
while((sqlrow=mysql_fetch_row(res_ptr))){
gTopic[i] = (char *)malloc(20*sizeof(char));
gTopic[i++] = sqlrow[0];
}
}
mysql_close(&conn_ptr);
}
大概是这样的 函数很长 使用到了其他的开源api,所以要使用make编译 不能使用gcc
19 个解决方案
#1
Makefile.sample文件是这样的:
API_HOME=../../
## Solaris/Forte compiler:
#CXX = CC
#CC = cc
#BSTATIC = -Bstatic
#BDYNAMIC = -Bdynamic
# GNU compiler:
CXX = g++
CC = gcc
BSTATIC = -Xlinker -Bstatic
BDYNAMIC = -Xlinker -Bdynamic
## Solaris system libraries:
#SYS_LIBS = -lsocket -lgen -lnsl -ldl
# Standard defines:
CPPFLAGS = \
-I$(API_HOME)/include
LDFLAGS = -rdynamic \
-L$(API_HOME)/lib
MAMA_LIBS = $(BDYNAMIC) -lmama \
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lrt -lpthread -lm
# Targets:
all: mamalistenc mamainboxc \
mamapublisherc mamasubscriberc \
mamasymbollistsubscriberc \
mamaproxyc mamaio \
mamamultisubscriberc mamaftmemberc
mamalistenc: mamalistenc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamapublisherc: mamapublisherc.o
$(LINK.c) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamasubscriberc: mamasubscriberc.o
$(LINK.c) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamainboxc: mamainboxc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamaio: mamaio.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamamultisubscriberc: mamamultisubscriberc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamaproxyc: mamaproxyc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamasymbollistsubscriberc: mamasymbollistsubscriberc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamaftmemberc: mamaftmemberc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
API_HOME=../../
## Solaris/Forte compiler:
#CXX = CC
#CC = cc
#BSTATIC = -Bstatic
#BDYNAMIC = -Bdynamic
# GNU compiler:
CXX = g++
CC = gcc
BSTATIC = -Xlinker -Bstatic
BDYNAMIC = -Xlinker -Bdynamic
## Solaris system libraries:
#SYS_LIBS = -lsocket -lgen -lnsl -ldl
# Standard defines:
CPPFLAGS = \
-I$(API_HOME)/include
LDFLAGS = -rdynamic \
-L$(API_HOME)/lib
MAMA_LIBS = $(BDYNAMIC) -lmama \
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lrt -lpthread -lm
# Targets:
all: mamalistenc mamainboxc \
mamapublisherc mamasubscriberc \
mamasymbollistsubscriberc \
mamaproxyc mamaio \
mamamultisubscriberc mamaftmemberc
mamalistenc: mamalistenc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamapublisherc: mamapublisherc.o
$(LINK.c) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamasubscriberc: mamasubscriberc.o
$(LINK.c) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamainboxc: mamainboxc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamaio: mamaio.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamamultisubscriberc: mamamultisubscriberc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamaproxyc: mamaproxyc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamasymbollistsubscriberc: mamasymbollistsubscriberc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamaftmemberc: mamaftmemberc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
#2
例子:
Makefile
main: main.cpp
g++ -o $@ $< -lxxlib
Makefile
main: main.cpp
g++ -o $@ $< -lxxlib
#3
没有main.cpp啊 是用纯c的
#4
g++ -o main.c -lmysqlclient 就一个文件的话就这样吧, 不用makefile了
#5
不止一个文件啊。。。。这个文件引用了很多开源的文件。。所以必须用make 。。大神帮帮忙啊
#6
也可以啊!!你包含时用相对路径或绝对路径, 或者 用-I选项 加入你自己的库文件路径
g++ -o main.c -lmysqlclient -I/home/mylib
g++ -o main.c -lmysqlclient -I/home/mylib
#7
这个引用的东西很复制啊 。。 能不能把这句话-lmysqlclient加到Makefile.sample里面? 第二楼我贴出了这个文件
#8
MAMA_LIBS = $(BDYNAMIC) -lmama \
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lrt -lpthread -lm -lmysqlclient
这样试一下
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lrt -lpthread -lm -lmysqlclient
这样试一下
#9
试过了 木有效果
#10
报什么错? 编译出错还是链接出错?
不行那就自己写makefile吧!!! 什么叫不能用GCC ,makefile还不是用GCC或G++
不行那就自己写makefile吧!!! 什么叫不能用GCC ,makefile还不是用GCC或G++
#11
还是说undefined reference 什么的。。。
#12
你确定 相应目录下的lib有相应内容么?我曾经装snmp的时候也会提示lib里东东找不到,而且很多错说找不到。重下了个版本,就ok。
#13
undefined reference error错误的原因可能来自以下几方面:
1 没有指定对应的库(.o/.a/.so)
使用了库中定义的实体,但没有指定库(-lXXX)或者没有指定库路径(-LYYY),会导致该错误,
2 连接库参数的顺序不对
在默认情况下,对于-l 使用库的要求是越是基础的库越要写在后面,无论是静态还动态
3 gcc/ld 版本不匹配
gcc/ld的版本的兼容性问题,由于gcc2 到gcc3大版本的兼容性存在问题(其实gcc3.2到3.4也一定程度上存在这样的问题) 当在高版本机器上使用低版本的机器就会导致这样的错误, 这个问题比较常见在32位的环境上, 另外就在32位环境不小心使用了64位的库或者反过来64位环境使用了32位的库.
4 C/C++相互依赖和链接
gcc和g++编译结果的混用需要保证能够extern "C" 两边都可以使用的接口,在我们的64位环境中gcc链接g++的库还需要加上-lstdc++,具体见前文对于混合编译的说明
1 没有指定对应的库(.o/.a/.so)
使用了库中定义的实体,但没有指定库(-lXXX)或者没有指定库路径(-LYYY),会导致该错误,
2 连接库参数的顺序不对
在默认情况下,对于-l 使用库的要求是越是基础的库越要写在后面,无论是静态还动态
3 gcc/ld 版本不匹配
gcc/ld的版本的兼容性问题,由于gcc2 到gcc3大版本的兼容性存在问题(其实gcc3.2到3.4也一定程度上存在这样的问题) 当在高版本机器上使用低版本的机器就会导致这样的错误, 这个问题比较常见在32位的环境上, 另外就在32位环境不小心使用了64位的库或者反过来64位环境使用了32位的库.
4 C/C++相互依赖和链接
gcc和g++编译结果的混用需要保证能够extern "C" 两边都可以使用的接口,在我们的64位环境中gcc链接g++的库还需要加上-lstdc++,具体见前文对于混合编译的说明
#14
有的啊 确定有的
#15
这几个错误原因对于的解决方法有吗?
#16
MAMA_LIBS = $(BDYNAMIC) -lmama \
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lmysqlclient -lrt -lpthread -lm
这样试一下
要不这样
#include<mysql/mysql.h>
MYSQL conn_ptr;
MYSQL_RES * res_ptr;
MYSQL_ROW sqlrow;
int main (int argc, const char** argv)
{
mysql_init(&conn_ptr);
return 0;
}
保存为main.c
再 gcc -o main.c -lmysqlclient 编译一下看还会不会出现找不到实现
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lmysqlclient -lrt -lpthread -lm
这样试一下
要不这样
#include<mysql/mysql.h>
MYSQL conn_ptr;
MYSQL_RES * res_ptr;
MYSQL_ROW sqlrow;
int main (int argc, const char** argv)
{
mysql_init(&conn_ptr);
return 0;
}
保存为main.c
再 gcc -o main.c -lmysqlclient 编译一下看还会不会出现找不到实现
#17
再 gcc -o main.c -lmysqlclient 编译一下看还会不会出现找不到实现 这样是可以的。。可以操作数据库。。
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lmysqlclient -lrt -lpthread -lm 但是这样修改后用make -f Makefile.sample 还是不行
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lmysqlclient -lrt -lpthread -lm 但是这样修改后用make -f Makefile.sample 还是不行
#18
那就是说库没问题 ,就是makefile的问题
MAMA_LIBS = $(BDYNAMIC) -lmama \
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lmysqlclient -lrt -lpthread -lm
试一下改一下-lmysqlclient 的位置 ,我试过位置不对时会出现这种情况,
不行我也没办法了,菜鸟一个
MAMA_LIBS = $(BDYNAMIC) -lmama \
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lmysqlclient -lrt -lpthread -lm
试一下改一下-lmysqlclient 的位置 ,我试过位置不对时会出现这种情况,
不行我也没办法了,菜鸟一个
#19
等 结果
#20
#1
Makefile.sample文件是这样的:
API_HOME=../../
## Solaris/Forte compiler:
#CXX = CC
#CC = cc
#BSTATIC = -Bstatic
#BDYNAMIC = -Bdynamic
# GNU compiler:
CXX = g++
CC = gcc
BSTATIC = -Xlinker -Bstatic
BDYNAMIC = -Xlinker -Bdynamic
## Solaris system libraries:
#SYS_LIBS = -lsocket -lgen -lnsl -ldl
# Standard defines:
CPPFLAGS = \
-I$(API_HOME)/include
LDFLAGS = -rdynamic \
-L$(API_HOME)/lib
MAMA_LIBS = $(BDYNAMIC) -lmama \
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lrt -lpthread -lm
# Targets:
all: mamalistenc mamainboxc \
mamapublisherc mamasubscriberc \
mamasymbollistsubscriberc \
mamaproxyc mamaio \
mamamultisubscriberc mamaftmemberc
mamalistenc: mamalistenc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamapublisherc: mamapublisherc.o
$(LINK.c) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamasubscriberc: mamasubscriberc.o
$(LINK.c) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamainboxc: mamainboxc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamaio: mamaio.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamamultisubscriberc: mamamultisubscriberc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamaproxyc: mamaproxyc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamasymbollistsubscriberc: mamasymbollistsubscriberc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamaftmemberc: mamaftmemberc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
API_HOME=../../
## Solaris/Forte compiler:
#CXX = CC
#CC = cc
#BSTATIC = -Bstatic
#BDYNAMIC = -Bdynamic
# GNU compiler:
CXX = g++
CC = gcc
BSTATIC = -Xlinker -Bstatic
BDYNAMIC = -Xlinker -Bdynamic
## Solaris system libraries:
#SYS_LIBS = -lsocket -lgen -lnsl -ldl
# Standard defines:
CPPFLAGS = \
-I$(API_HOME)/include
LDFLAGS = -rdynamic \
-L$(API_HOME)/lib
MAMA_LIBS = $(BDYNAMIC) -lmama \
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lrt -lpthread -lm
# Targets:
all: mamalistenc mamainboxc \
mamapublisherc mamasubscriberc \
mamasymbollistsubscriberc \
mamaproxyc mamaio \
mamamultisubscriberc mamaftmemberc
mamalistenc: mamalistenc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamapublisherc: mamapublisherc.o
$(LINK.c) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamasubscriberc: mamasubscriberc.o
$(LINK.c) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamainboxc: mamainboxc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamaio: mamaio.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamamultisubscriberc: mamamultisubscriberc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamaproxyc: mamaproxyc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamasymbollistsubscriberc: mamasymbollistsubscriberc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
mamaftmemberc: mamaftmemberc.o
$(LINK.C) -o $@ $^ $(MAMA_LIBS) $(SYS_LIBS)
#2
例子:
Makefile
main: main.cpp
g++ -o $@ $< -lxxlib
Makefile
main: main.cpp
g++ -o $@ $< -lxxlib
#3
没有main.cpp啊 是用纯c的
#4
g++ -o main.c -lmysqlclient 就一个文件的话就这样吧, 不用makefile了
#5
不止一个文件啊。。。。这个文件引用了很多开源的文件。。所以必须用make 。。大神帮帮忙啊
#6
也可以啊!!你包含时用相对路径或绝对路径, 或者 用-I选项 加入你自己的库文件路径
g++ -o main.c -lmysqlclient -I/home/mylib
g++ -o main.c -lmysqlclient -I/home/mylib
#7
这个引用的东西很复制啊 。。 能不能把这句话-lmysqlclient加到Makefile.sample里面? 第二楼我贴出了这个文件
#8
MAMA_LIBS = $(BDYNAMIC) -lmama \
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lrt -lpthread -lm -lmysqlclient
这样试一下
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lrt -lpthread -lm -lmysqlclient
这样试一下
#9
试过了 木有效果
#10
报什么错? 编译出错还是链接出错?
不行那就自己写makefile吧!!! 什么叫不能用GCC ,makefile还不是用GCC或G++
不行那就自己写makefile吧!!! 什么叫不能用GCC ,makefile还不是用GCC或G++
#11
还是说undefined reference 什么的。。。
#12
你确定 相应目录下的lib有相应内容么?我曾经装snmp的时候也会提示lib里东东找不到,而且很多错说找不到。重下了个版本,就ok。
#13
undefined reference error错误的原因可能来自以下几方面:
1 没有指定对应的库(.o/.a/.so)
使用了库中定义的实体,但没有指定库(-lXXX)或者没有指定库路径(-LYYY),会导致该错误,
2 连接库参数的顺序不对
在默认情况下,对于-l 使用库的要求是越是基础的库越要写在后面,无论是静态还动态
3 gcc/ld 版本不匹配
gcc/ld的版本的兼容性问题,由于gcc2 到gcc3大版本的兼容性存在问题(其实gcc3.2到3.4也一定程度上存在这样的问题) 当在高版本机器上使用低版本的机器就会导致这样的错误, 这个问题比较常见在32位的环境上, 另外就在32位环境不小心使用了64位的库或者反过来64位环境使用了32位的库.
4 C/C++相互依赖和链接
gcc和g++编译结果的混用需要保证能够extern "C" 两边都可以使用的接口,在我们的64位环境中gcc链接g++的库还需要加上-lstdc++,具体见前文对于混合编译的说明
1 没有指定对应的库(.o/.a/.so)
使用了库中定义的实体,但没有指定库(-lXXX)或者没有指定库路径(-LYYY),会导致该错误,
2 连接库参数的顺序不对
在默认情况下,对于-l 使用库的要求是越是基础的库越要写在后面,无论是静态还动态
3 gcc/ld 版本不匹配
gcc/ld的版本的兼容性问题,由于gcc2 到gcc3大版本的兼容性存在问题(其实gcc3.2到3.4也一定程度上存在这样的问题) 当在高版本机器上使用低版本的机器就会导致这样的错误, 这个问题比较常见在32位的环境上, 另外就在32位环境不小心使用了64位的库或者反过来64位环境使用了32位的库.
4 C/C++相互依赖和链接
gcc和g++编译结果的混用需要保证能够extern "C" 两边都可以使用的接口,在我们的64位环境中gcc链接g++的库还需要加上-lstdc++,具体见前文对于混合编译的说明
#14
有的啊 确定有的
#15
这几个错误原因对于的解决方法有吗?
#16
MAMA_LIBS = $(BDYNAMIC) -lmama \
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lmysqlclient -lrt -lpthread -lm
这样试一下
要不这样
#include<mysql/mysql.h>
MYSQL conn_ptr;
MYSQL_RES * res_ptr;
MYSQL_ROW sqlrow;
int main (int argc, const char** argv)
{
mysql_init(&conn_ptr);
return 0;
}
保存为main.c
再 gcc -o main.c -lmysqlclient 编译一下看还会不会出现找不到实现
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lmysqlclient -lrt -lpthread -lm
这样试一下
要不这样
#include<mysql/mysql.h>
MYSQL conn_ptr;
MYSQL_RES * res_ptr;
MYSQL_ROW sqlrow;
int main (int argc, const char** argv)
{
mysql_init(&conn_ptr);
return 0;
}
保存为main.c
再 gcc -o main.c -lmysqlclient 编译一下看还会不会出现找不到实现
#17
再 gcc -o main.c -lmysqlclient 编译一下看还会不会出现找不到实现 这样是可以的。。可以操作数据库。。
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lmysqlclient -lrt -lpthread -lm 但是这样修改后用make -f Makefile.sample 还是不行
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lmysqlclient -lrt -lpthread -lm 但是这样修改后用make -f Makefile.sample 还是不行
#18
那就是说库没问题 ,就是makefile的问题
MAMA_LIBS = $(BDYNAMIC) -lmama \
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lmysqlclient -lrt -lpthread -lm
试一下改一下-lmysqlclient 的位置 ,我试过位置不对时会出现这种情况,
不行我也没办法了,菜鸟一个
MAMA_LIBS = $(BDYNAMIC) -lmama \
$(BDYNAMIC) $($(API_PLATFORM)_libs) -lmysqlclient -lrt -lpthread -lm
试一下改一下-lmysqlclient 的位置 ,我试过位置不对时会出现这种情况,
不行我也没办法了,菜鸟一个
#19
等 结果