makefile 如何获得LIB路径

idot 2008-07-30 07:24:08
功能:编译Pro*C程序
描述:首先调用C:/oracle/product/10.1.0/db/proc.exe 编译pc文件,生成c文件,
然后调用调用gcc,利用C:/oracle/product/10.1.0/db/precomp/LIB/msvc/ORASQL10.LIB 和
C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Lib目录下lib
(使用到的lib如下: kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib
odbc32.lib odbccp32.lib)和
C:/oracle/product/10.1.0/db/precomp/public 目录下的h文件
(使用到的h文件如下:sqlca.h sqlda.h sqlcrp.h)
生成exe文件。

我写的makefile内容如下:
CXXFLAGS = -O2 -g -Wall -fmessage-length=0

####################################### BEGIN USER DEFINITION #######################################

# Please set 'PROGRAM' to your real project name like below.
PROGRAM = zcolbgdc00001

CXX = gcc

ORADBHOME = C:/oracle/product/10.1.0/db

####################################### END USER DEFINITION #######################################

TARGET = $(PROGRAM).exe

OBJS = $(PROGRAM).o

ORAHEADERHOME = $(ORADBHOME)/precomp/public

vpath *.lib "$(ORADBHOME)/precomp/LIB/msvc":"C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Lib"

LIBS = ORASQL10.LIB kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

$(TARGET): $(OBJS)
@echo 'Building target: $@'
ld -o $(TARGET) $(OBJS)
@echo 'Finished building target: $@'
@echo 'Done.'

$(PROGRAM).o: $(PROGRAM).c
@echo 'Building target: $@'
$(CXX) -o"$(OBJS)" $(PROGRAM).c -I $(ORAHEADERHOME) $(LIBS)
@echo 'Finished building target: $@'
@echo '...'

$(PROGRAM).c: $(PROGRAM).pc
@echo 'Building target: $@'
${ORADBHOME}/bin/proc $(PROGRAM).pc oname=$(PROGRAM).c
@echo 'Finished building target: $@'
@echo '...'

all: $(TARGET)

clean:
rm -f $(OBJS) $(TARGET)


出错的信息如下:
'Building target: zcolbgdc00001.o'
gcc -o"zcolbgdc00001.o" zcolbgdc00001.c -I C:/oracle/product/10.1.0/db/precomp/public ORASQL10.LIB kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
zcolbgdc00001.c: In function `main':
zcolbgdc00001.c:381: warning: return type of 'main' is not `int'
gcc: ORASQL10.LIB: No such file or directory
gcc: kernel32.lib: No such file or directory
gcc: user32.lib: No such file or directory
gcc: gdi32.lib: No such file or directory
gcc: winspool.lib: No such file or directory
gcc: comdlg32.lib: No such file or directory
gcc: advapi32.lib: No such file or directory
gcc: shell32.lib: No such file or directory
gcc: ole32.lib: No such file or directory
gcc: oleaut32.lib: No such file or directory
gcc: uuid.lib: No such file or directory
gcc: odbc32.lib: No such file or directory
gcc: odbccp32.lib: No such file or directory
make: *** [zcolbgdc00001.o] Error 1



请问如何解决lib的路径问题。
...全文
1472 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Unique20102003 2008-09-13
  • 打赏
  • 举报
回复
windows下搞pro*c可以直接在VC中搞啊,写makefile不如在linux里面搞了啊
lin_style 2008-07-31
  • 打赏
  • 举报
回复
我测试了一下,在windwos下,make的 vpath没有作用,连ld的-L也没有作用,所以你的.lib没法找到,我暂时也没有找到好的方法,笨办法是将所有库的全路径写在程序中
ORACLELIB="$(ORADBHOME)/precomp/LIB/msvc"
MSLIB="C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Lib"
LIBS=$(ORACLELIB)ORASQL10.LIB $(MSLIB)kernel32.lib $(MSLIB)user32.lib ...


貌似我蒙得有点对了。。呵呵。

LIBS=$(ORACLELIB)ORASQL10.LIB $(MSLIB)kernel32.lib $(MSLIB)user32.lib
这个直接就改成*.lib应该可以吧
aozhi 2008-07-31
  • 打赏
  • 举报
回复
$(CXX) -o"$(OBJS)" $(PROGRAM).c -I $(ORAHEADERHOME) $(LIBS)

$(CXX) -o"$(OBJS)" $(PROGRAM).c -I $(ORAHEADERHOME)/$(LIBS)
另外,10g用得少,记不清有没有这些了。
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
貌似都是些windows的东西。
悠悠长风 2008-07-31
  • 打赏
  • 举报
回复
使用-L
柯本 2008-07-31
  • 打赏
  • 举报
回复
你的makefile有些小问题
$(CXX) -o"$(OBJS)" $(PROGRAM).c -I $(ORAHEADERHOME) $(LIBS)
改为:
$(CXX) -c -o "$(OBJS)" $(PROGRAM).c -I $(ORAHEADERHOME)
(你先编译成.o文件,必须有-c选项,且编译时不用库)
ld -o $(TARGET) $(OBJS)
改为:
ld -o $(TARGET) $(OBJS) $(LIBS)
我测试了一下,在windwos下,make的 vpath没有作用,连ld的-L也没有作用,所以你的.lib没法找到,我暂时也没有找到好的方法,笨办法是将所有库的全路径写在程序中
ORACLELIB="$(ORADBHOME)/precomp/LIB/msvc"
MSLIB="C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Lib"
LIBS=$(ORACLELIB)ORASQL10.LIB $(MSLIB)kernel32.lib $(MSLIB)user32.lib ...

lin_style 2008-07-31
  • 打赏
  • 举报
回复
LIBS = ORASQL10.LIB kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

试着手动加目录指定下, vpath *.lib "$(ORADBHOME)/precomp/LIB/msvc":"C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Lib" ,这个先去掉
idot 2008-07-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jillnicky 的回复:]
zcolbgdc00001.c: In function `main':
zcolbgdc00001.c:381: warning: return type of 'main' is not `int'
应该是main函数的问题吧?dev???int main()才行!~
[/Quote]
只是一个警告,不影响make的执行过程。

[Quote=引用 5 楼 jillnicky 的回复:]
C:/oracle/product/10.1.0/db/precomp/public ORASQL10.LIB 和之后的那些文件都在public目录下???如果是的话得加/
[/Quote]
不是的,我在题目中已经说得够明白的了。
  • 打赏
  • 举报
回复
C:/oracle/product/10.1.0/db/precomp/public ORASQL10.LIB 和之后的那些文件都在public目录下???如果是的话得加/
  • 打赏
  • 举报
回复
zcolbgdc00001.c: In function `main':
zcolbgdc00001.c:381: warning: return type of 'main' is not `int'
应该是main函数的问题吧?dev???int main()才行!~
idot 2008-07-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ChamPagneZ 的回复:]
BatchFile codeLIB_PATH=-L.-L${Your Home}/lib
[/Quote]
你那个是Linux下的方法,我的是Windows环境,所以你那个方法好像不行,不过先谢谢你。
zjw6861982 2008-07-31
  • 打赏
  • 举报
回复
不熟,帮顶
realdragon2 2008-07-31
  • 打赏
  • 举报
回复
试一下:
[code=BatchFile]
vpath *.lib -> vpath %.lib
[/code]
laiwusheng 2008-07-31
  • 打赏
  • 举报
回复
Windows+MinGW下示例,比如windows下需要cxxd.lib,cxx.lib,mpi.lib,其中cxxd.lib是用于调试,如果lib文件是放在./ms/lib中,
g++ main.cpp -I./ms/include -L./ms/lib -lcxxd -lmpi -o main.exe
hai040 2008-07-31
  • 打赏
  • 举报
回复
gcc不是-L吗?
gcc --?
idot 2008-07-31
  • 打赏
  • 举报
回复
还有没有其他的更简洁的方案?
idot 2008-07-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 keiy 的回复:]
你的makefile有些小问题
$(CXX) -o"$(OBJS)" $(PROGRAM).c -I $(ORAHEADERHOME) $(LIBS)
改为:
$(CXX) -c -o "$(OBJS)" $(PROGRAM).c -I $(ORAHEADERHOME)
(你先编译成.o文件,必须有-c选项,且编译时不用库)
ld -o $(TARGET) $(OBJS)
改为:
ld -o $(TARGET) $(OBJS) $(LIBS)
我测试了一下,在windwos下,make的 vpath没有作用,连ld的-L也没有作用,所以你的.lib没法找到,我暂时也没有找到好的方法,笨办法是将所有库的全路径…
[/Quote]
如果是这样的话 ,那可真是太让人失望了。
ChamPagneZ 2008-07-30
  • 打赏
  • 举报
回复
[code=BatchFile]
LIB_PATH = -L. -L${Your Home}/lib
[/code]

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧