linux下编译问题 库的使用 急!!!!

wshn13 2011-02-25 09:26:16
比如我开发一个gtk的程序 编译时候这么gcc -o app app.c `pkg-config --libs --cflags gtk+-2.0`
现在我要使用rpm库开发一个rpm相关的程序(rpm库已经安装), 那么在pkg-config 里面应该怎么用 `pkg-config --libs --cflags rpm-4.0` 这个不行

附源码:
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

#include <rpm/rpmlib.h>

int main()
{

ts = rpmtsCreate();

rpmtsSetRootDir(ts, NULL);
add_for_install(ts, optarg, upgrade);
tsi = rpmtsiInit(ts);
rc = rpmtsCheck(ts);
probs = rpmtsProblems(ts);
if (rc || probs->numProblems > 0) {
rpmpsPrint(fp, probs); // trying to redirect install logs to a file
while(fgets(buf,128,fp))
{
data.append(buf);
}

rpmpsFree(probs);
rpmtsFree(ts);
exit(rc);
}


/* Create ordering for the transaction */

rc = rpmtsOrder(ts);
if (rc > 0) {
printf("Ordering failed\n");
rpmtsFree(ts);
exit(rc);
}
rpmtsClean(ts);


/* Set callback routine & flags, for example -vh */


notifyFlags |= INSTALL_LABEL | INSTALL_HASH;
rpmtsSetNotifyCallback(ts, rpmShowProgress, (void *)notifyFlags);


/* Set transaction flags and run the actual transaction */


rpmtsSetFlags(ts, (rpmtransFlags)(rpmtsFlags(ts) | tsFlags));
rc = rpmtsRun(ts, NULL, (rpmprobFilterFlags)probFilter);


/* Check for results .. */


if (rc || probs->numProblems > 0)
rpmpsPrint(fp, probs);
while(fgets(buf,128,fp))
{
data.append(buf); // trying to redirect logs to a file
}
rpmpsFree(probs);
rpmtsFree(ts);
exit(rc);

}




int add_for_install(rpmts ts, char *file, int upgrade)
{
FD_t fd;
Header hdr;
int rc = 0;
rpmRelocation * relocs;
relocs = (rpmRelocation *)malloc(2*sizeof(rpmRelocation));
relocs->oldPath = "/opt/";
relocs->newPath = "/mnt/tmp"; // trying to relocate installation to a diff directory
fd = Fopen(file, "r.ufdio");
if (fd == NULL) {
printf("Unable to open file %s\n", file);
return 1;
}

rc = rpmReadPackageFile(ts, fd, file, &hdr);
if (rc != RPMRC_OK) {
printf("Unable to read package %s\n", file);
return rc;
}

/* Add it to the transaction set */

rc = rpmtsAddInstallElement(ts, hdr, file, upgrade,relocs);

if (rc) {
printf("Error adding %s to transaction\n", file);
goto out;
}
out:
headerFree(hdr);
Fclose(fd);
return rc;
}

...全文
153 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
二狗蹲坑 2011-03-20
  • 打赏
  • 举报
回复
在你安装的rpm-4.0那个文件夹里应该有个lib文件夹吧?
看看有没有rpm-4.0/lib/pkgconfig这个文件夹?
如:/usr/lib/rpm-4.0/pkgconfig
有的话,执行一下:export PKG_CONFIG_PATH=/usr/lib/rpm-4.0/pkgconfig:$PKG_CONFIG_PATH
然后编译是用gcc -o app app.c `pkg-config --libs --cflags rpm-4.0`编译.
Frankwz 2011-03-18
  • 打赏
  • 举报
回复
使用 pkg-config --libs --cflags rpm-4.0
需要找到rpm对应的*.pc配置文件 才可以的
wshn13 2011-02-28
  • 打赏
  • 举报
回复
晕 大家帮帮忙阿
wshn13 2011-02-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yangqiushi823 的回复:]

直接加 -l库名 -L路径, 可能是路径没有指正确
[/Quote]

你能不能实际地编译一下阿 在这 http://www.rpm.org/max-rpm/s1-rpm-rpmlib-example-code.html
yangqiushi823 2011-02-28
  • 打赏
  • 举报
回复
直接加 -l库名 -L路径, 可能是路径没有指正确
wshn13 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yong_f 的回复:]

直接加 -l库名 -L路径
[/Quote]
还是不行啊 你能不能具体操作一下啊
yong_f 2011-02-25
  • 打赏
  • 举报
回复
直接加 -l库名 -L路径
wshn13 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ww2000e 的回复:]

直接加 -l库名 试试?
[/Quote]

还是不行阿 你能帮我试试吗 有源码
ww2000e 2011-02-25
  • 打赏
  • 举报
回复
直接加 -l库名 试试?

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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