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

时间:2016-12-22 07:30:36

标签: c++ linker clang

我在自定义文件夹中下载并编译了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?

1 个答案:

答案 0 :(得分:0)

重命名您的库文件(例如,更改为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