确保链接到非系统安装的库

Make sure to link against non-system installed library

本文关键字:系统安装 链接 确保      更新时间:2023-10-16

我在自定义文件夹中下载并编译了libevent,但我注意到还有一个系统范围的libevent安装。但是我想链接与我编制的那个联系。

我的程序看起来像这样:

#include <iostream>
#include <string.h>
#include <errno.h>
#include <stdio.h>
#include <signal.h>
#include <event2/bufferevent.h>
#include <event2/buffer.h>
#include <event2/listener.h>
#include <event2/util.h>
#include <event2/event.h>
#include <event2/frob.h>
int main()
{
  struct event_base *base;
  struct evconnlistener *listener;
  struct event *signal_event;
  base = event_base_new();
  std::cout << "Finished getting new event base" << std::endl;
  return 0;
}

然后,在下载的libevent版本中,我进行了一些修改,例如将 exit(-1)插入 event_base_new()函数,同时编译,我的程序和libevent,然后运行可执行文件。但是,该程序在没有退出的情况下完成。

这是我编译的方式:

clang++ -I/Users/max/Downloads/libevent-2.0.22-stable/include -Wall -g -c server.cpp
clang++ -Wall -g server.o -L/Users/max/Downloads/libevent-2.0.22-stable/ -levent -o server

这不足以告诉链接器使用我的其他版本的libevent?

重命名您的库文件(例如, libevent_customized.a),并向链接器提供重命名的库的名称:

clang++ -Wall -g server.o -L/path/to/lib -levent_customized -o server
#                                        ^^^^^^^^^^^^^^^^^^

另外,您可以使用其完整路径作为常规参数指定库文件(这仅适用于静态库):

clang++ -Wall -g server.o /path/to/lib/libevent.a -o server