我搜索过网络和StackOverflow很多,但似乎无法找到我以下问题的明确答案.
语境:
我希望移植一组C++帮助程序库,以便与Windows Phone 8(WP8)平台一起使用.从历史上看,这些库是作为静态库(而不是DLL)构建的.
我已成功编写了特定于WP8的代码,因此使用WP8可用的API(使用WP API QuickStart doc作为参考点),库与ARM兼容并构建.由于必须用WinRT的ThreadPool替换经典的Win32 Thread调用,因此只有一个库(例如Lib1)需要使用WinRT扩展(/ ZW标志).
构建Lib1时,我收到以下警告:警告1警告LNK4264:将使用/ ZW编译的目标文件归档到静态库中; 请注意,在创作Windows运行时类型时,建议不要使用包含Windows运行时元数据的静态库进行链接.
- 搜索此警告,我发现这篇文章,指出:"如果您使用创建公共引用类,公共接口类或公共值类的静态库,链接器会引发此警告.如果静态,您可以安全地忽略警告库不会生成在库本身之外使用的Windows运行时组件.静态库中的公共组件将编译但不会在运行时激活.任何打算供其他组件或应用程序使用的Windows运行时组件必须在动态中实现-link library(DLL)."
在Lib1中,ClassA包含使用WinRT ThreadPool调用的函数.ClassA调用ClassA函数,它们只是将常规HANDLE和DWORD返回给ClassB.
代码示例:
// ClassA.cpp
HANDLE WINAPI ClassA::CreateThread(/* Params that are usually passed to Win32 CreateThread */)
{
// Do WinRTThreadPool stuff to create WorkItem
auto workItem = ref new Windows::System::Threading::WorkItemHandler([=](Windows::Foundation::IAsyncAction^)
// More code that eventually results in a Win32 Handle
return handle;
}
// ClassB.cpp
Handle handle = ClassA::CreateThread(/* Params that are usually passed to Win32 CreateThread */);
Run Code Online (Sandbox Code Playgroud)
ClassA的函数只能由ClassB从Lib1中调用,然后ClassB可以被链接Lib1的应用程序使用.
最后,对我的问题: …
c++ cross-platform static-libraries windows-runtime windows-phone-8