- 论坛徽章:
- 1
|
比如我开发一个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;
- }
复制代码 |
|