0

我在我的项目(Kitura https://github.com/IBM-Swift/Kitura )中使用CCurl(https://github.com/IBM-Swift/CCurl.git)然后我调用func curlHelperSetOptString,编译“swift build”并得到一个错误:

重复符号 _curlHelperSetOptString 在:/Users/xxxx/Documents/server/ServerSwift/.build/debug/ServerSwift.build/UploadService.swift.o /Users/xxxx/Documents/server/ServerSwift/.build/debug/KituraNet.build/ ClientRequest.swift.o ld:架构 x86_64 的 1 个重复符号:0:错误:链接命令失败,退出代码为 1(使用 -v 查看调用):0:错误:构建有 1 个命令失败

代码:

import CCurl
var handle=curl_easy_init()
if (handle != nil) {
        let url = "http: //example.com/"
        let buffer=url.cString(using: .utf8)
        curlHelperSetOptString(handle, CURLOPT_URL, buffer)
}

帮帮我,请

4

5 回答 5

1

实际上可能是因为我们将 CCurl 辅助函数定义为外部内联,而不是静态内联。显然,extern inline 会导致对已定义函数的引用之一成为外部名称,如果多次导入它可能会导致问题。

我们将对此进行调查。

于 2016-10-02T07:16:04.267 回答
1

IBM-Swift/CCurl.git 0.2.2 已被标记。它包含对此处提到的问题的修复。

于 2016-10-02T09:05:41.440 回答
0

当它已经包含CCurl在.Package.swiftKitura-Net/Package.swift

对于大多数 Swift 模块,这不是问题,但CCurl必须对其进行破解,因为libCurl它主要包含可变参数函数,而Swift 不会从 C 库中导入可变参数函数hack在 C 头文件中创建静态函数以创建函数的非可变版本libCurl。在这里复制的是那些静态函数(每个模块都是单独编译的,所以你不能#ifndef绕过它们,因为它们看不到彼此)。

尝试CCurl从您的 Package.swift 文件中删除依赖项,并仅依赖于它被包含在内的事实,希望您会没事的。

于 2016-09-30T18:40:26.507 回答
0

检查您在 Build Phases/Compile Sources 下是否没有多个条目。如果是,请删除它们。

您也可以尝试清理您的项目,甚至swift package generate-xcodeproj再次运行。

于 2016-09-30T17:54:23.520 回答
0

这是因为您正在导入已经在 kitura-net 包中导入的 ccurl。

于 2016-09-30T18:30:06.050 回答