【发布时间】:2010-10-30 13:21:12
【问题描述】:
我正在创建一个将由 R(统计程序)使用的包,我不是使用此应用程序的专家,但我设法使用以下逻辑创建了一个非常简单的包,我有C++ 中的一些类,因为代码必须使用 R 编译器编译并且它只允许 C 代码,我有一个调用 C++ 方法的包装 C 代码,后来我有一个调用 C 公开的方法的 R 脚本代码,所以基本上是像 R CC++ 这样的通信。
我用来创建这个包的完整教程在here,我添加它作为参考。
现在我的问题是我需要向我已经创建的包添加一些功能,我需要做的是添加用于后期绑定到 COM 对象的代码,这是我创建的另一个产品并使用它注册regasm 工具。
这是我用来尝试后期绑定到 COM 对象的 c++ 代码,我正在尝试使用 IDispatch 来执行此操作:
{
...
CLSID clsid;
HRESULT hr = CLSIDFromProgID((WCHAR*)"My Com object ProgId", &clsid);
if(FAILED(hr))
return;
...
}
我没有粘贴整个代码,因为只有这些行编译器已经给我带来了麻烦,我用来编译的命令是
R CMD SHLIB Cclass.cc C++class.cc
其中“Cclass.cc”包含调用 c++ 方法的 C 代码,而“C++class.cc”实际上是 C++ 代码。
当我编译这些类时,编译器会说
"undefined reference to `CLSIDFromProgID@8'collect2: ld returned 1 exit status"
我确定我已经添加了我需要的所有头文件,这就是为什么我认为我的问题是我没有包括静态库 ole32.lib 和 oleaut32.lib。
所以,我的问题是,我如何包含这些库以便能够使用后期绑定的方法,例如 CLSIDFromProgID(...) 或 QueryInterface(...)。此外,如果有人认为我的问题不是链接这个库,而是其他问题,如果能指出我的问题可能是什么,那就太好了。
另外请记住,我需要以一种可以通过 R 编译器毫无问题地编译它们的方式链接这些静态库,如果我没记错的话,它只是一个 c 编译器。
【问题讨论】:
标签: gcc compiler-construction r static-libraries