Ошибка при вызове curlHelperSetOptString из модуля CCurl - swift -Kitura

я использую CCurl (https://github.com/IBM-Swift/CCurl.git ) в моем проекте (Kitura https://github.com/IBM-Swift/Kitura), затем я вызываю func curlHelperSetOptString , компилирую "быструю сборку" и получаю сообщение об ошибке:

повторяющийся символ _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: 1 повторяющийся символ для архитектуры x86_64 :0: ошибка: команда link не выполнена с кодом выхода 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)
}

Помогите мне, плз


person duck    schedule 30.09.2016    source источник


Ответы (5)


Вероятно, вы включаете CCurl непосредственно в Package.swift, когда оно уже включено в Kitura-Net/Package.swift.

С большинством модулей Swift это не будет проблемой, но CCurl должен иметь хак, потому что libCurl содержит в основном вариативные функции и Swift не импортирует функции с переменным числом переменных из библиотек C. Этот хак создает статические функции в заголовочном файле C, чтобы создать невариативную версию функций libCurl. Здесь дублируются именно те статические функции (и каждый модуль компилируется отдельно, так что вы не можете #ifndef их обойти, потому что они не видят друг друга).

Попробуйте удалить зависимость CCurl из файла Package.swift и просто полагайтесь на тот факт, что она включена для вас, и, надеюсь, все будет в порядке.

person Carl Brown    schedule 30.09.2016

На самом деле это может быть потому, что мы определили вспомогательные функции CCurl как внешние встроенные, а не как статические встроенные. По-видимому, extern inline приводит к тому, что одна из ссылок на определенную функцию становится внешним именем, что может вызвать проблемы, если оно импортируется более одного раза.

Мы рассмотрим это.

person skallner    schedule 02.10.2016

IBM-Swift/CCurl.git 0.2.2 помечен. Он содержит исправление для проблемы, упомянутой здесь.

person skallner    schedule 02.10.2016

Убедитесь, что у вас нет нескольких записей в разделе «Фазы сборки/Источники компиляции». Если да, удалите их.

Также вы можете попробовать очистить свой проект или даже снова запустить swift package generate-xcodeproj.

person Thanos    schedule 30.09.2016

Это потому, что вы импортируете ccurl, который уже импортирован в пакете kitura-net.

person Lloyd Roseblade    schedule 30.09.2016