【发布时间】:2013-08-26 00:44:53
【问题描述】:
我有以下 c++ 程序:
客户端.h
#ifndef Client_Client_h
#define Client_Client_h
#include "Client.h"
class Client {
public:
void f1();
void f2();
};
#endif
客户端.cpp
#include <iostream>
#include <stdlib.h>
using namespace std;
#include "Client.h"
void Client::f1(){
cout << "Client.f1()" << endl;
}
void Client::f2() {
cout << "Client.f2()" << endl;
}
在 XCode 4.3 中编译上述内容会给我一个静态库文件,名为:
libClient.a
另外,我有一个 main.c
#include <stdio.h>
//
//using namespace std;
int main(){
// how do I do something like: Client c; c.f1(); c.f2();
// and actually get output ?
printf("hello\n");
return 0;
}
为了调用 f1() 和 f2() 我需要采取哪些步骤?如何使用 GCC 正确链接静态库?
到目前为止我已经尝试过:
gcc -lClient.a main.c
这给了我:
ld: library not found for -lClient.a
collect2: ld returned 1 exit status
【问题讨论】:
-
我认为这行不通,您的目标程序可能需要是 C++
-
那么根本就没有从 C 程序调用 C++ 功能的聪明方法吗?
-
您可以将其包装到库中的一个函数中。
extern "C" void invoke_f1();并将其导出。 -
@user1068636 使用
-lClient,而不是-lClient.a,加载libClient.a。