首页 > 解决方案 > iOS 框架。具有相同名称的模板函数,链接器选择错误的函数?

问题描述

我有一个带有两个框架的简单 iOS 应用程序。每个框架都有一个公共函数,它从私有模板函数返回一个特定的值。当应用程序从框架调用公共函数时 - 我希望获得那些不同的特定值,但每个框架都从第一个嵌入式框架调用相同的模板函数!

framework01
    testFramework01.h
        int framework01_Func();               // public function, calls private template function "func"
    common.h
        template<typename T> int func(T & data)   // private template function, returns "11"
framework02
    testFramework02.h
        int framework02_Func();               // public function, calls private template function "func"
    common.h
        template<typename T> int func(T & data)   // private template function, returns "22"
App
    int n1 = framework01_Func();        // expecting to get "11", got "11"
    int n2 = framework02_Func();        // expecting to get "22", but got "11"

当我从私有函数中删除“模板”状态时 - 一切都开始按预期工作。

谁能解释一下——为什么每个框架都不能使用自己的私有函数?有没有办法在每个框架中保留自己的功能(任何链接器标志或其他东西)?

作为奖励 - 每个框架都有一个同名的全局变量,并且在构建应用程序时没有“多个符号”错误,因此框架嵌入与静态链接不同 Windows 和 DLL 中没有此类问题(数据存储在自己的地址空间)。iOS 框架的工作方式不同吗?

源项目在这里:https ://github.com/iamlosthere/iOSFrameworksWithSameFunctionName

谢谢。

标签: c++xcodeios-frameworks

解决方案


推荐阅读