c和C++与库的链接
假设我有一个使用类和模板的C++库lib.h。再假设我有以下的自定义C++头myLink.h:c和C++与库的链接
#include "lib.h"
//call methods from lib.h that use templates and classes
// and return an integer based off of the information gained from calling functions lib.h
extern "C" int foo(int param1, const int param2);
现在假设我在一个名为C test.c.如下调用函数foo()是否合法?
//in test.c
int first = foo(5, 6);
此外,编译的目标代码/链接器阶段发生了什么?
谢谢!
按如下方式调用函数foo()是否合法?
int first = foo(5, 6);
是的,这是合法的。尽管您应该阅读以下内容,以确保此法律通话将链接。
汇编的对象代码/链接器阶段发生了什么?
类的使用不会干涉。 C++类将被编译为链接器将理解的对象代码。从多德的评论
编辑:
你的模板也将凭借foo
称他们创建的。
不是真的 - 如果'foo'使用任何模板,当您编译定义'foo'的C++源文件时,它们将被实例化。 – 2012-07-10 03:19:49
@ChrisDodd:你是对的!谢谢。 – 2012-07-10 03:27:31
您可能需要链接一个支持C++的链接器。 C++端可能具有访问静态对象,使用异常处理或任何需要特定于C++的初始化代码的其他任何东西的代码。 – sfstewman 2012-07-10 04:01:04
您可能希望让您的“myLink.h”能够从C和C++编译,例如通过使用'#ifdef __cplusplus'在单独的行上包装'extern“C”{'和'}'。这样'int foo(int param1,const int param2);'部分对于纯C代码是可见的,其余部分对C++是可见的。如果没有这个,你的“test.c”将需要一个单独的方法来声明函数。 – 2012-07-10 03:19:29