Не могу связать другие проекты в моем решении с premake

Я пытаюсь начать работу с premake, но не могу правильно связать свой тестовый проект с ним. Если я свяжу это руководство, оно работает нормально.

Я использую premake 4.3 (также тестировал его с premake 4.4) на OS X 10.9 с clang 3.4.

После того, как я создаю make-файл с помощью «premake4 gmake» и пытаюсь его скомпилировать, я получаю следующую ошибку:

Linking subproject
ld: internal error: atom not found in symbolIndex(__ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc) for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [libsubproject.dylib] Error 1
make: *** [subproject] Error 2

Моя довольно простая настройка проекта:

project/
    src/
        test.cpp
    subproject/
        include/
            Library.hpp
        source/
            Library.cpp
    premake4.lua

premake4.lua

solution "testa"
    configurations {"debug"}
    language "C++"

    includedirs {"subproject/include"}

    project "subproject"
        kind "SharedLib"
        files {"subproject/source/*.cpp"}

    project "main"
        kind "ConsoleApp"
        files {"src/*.cpp"}

        links {"subproject"}

источник/test.cpp

#include <iostream>
#include <Library.hpp>

using namespace std;

int main() {
    cout << "Hello, World!" << endl;

    Library lib(13, 3);

    lib.do_stuff(7);

    return 0;
}

подпроект/include/Library.hpp

#ifndef __LIBRARY_HPP__
#define __LIBRARY_HPP__

#include <iostream>

using namespace std;

class Library {
public:
    Library(int, int);
    void do_stuff(int) const;

private:
    int x;
    int y;

};

#endif

подпроект/источник/Library.cpp

#include <Library.hpp>

Library::Library(int x, int y) {
    this->x = x;
    this->y = y;
}

void Library::do_stuff(int z) const {
    cout << "X: " << x << "Y: " << y << "Z: " << z << endl;
}

Спасибо за ваше время.


person kasoki    schedule 27.03.2014    source источник
comment
Этот поиск Google кажется указать на ошибку в Clang, связанную с удалением мертвого кода. Хотя я еще не смог выяснить, какие волшебные флаги сборки необходимы для его работы.   -  person J. Perkins    schedule 31.03.2014


Ответы (1)


Это известная ошибка премейка. Об этом сообщалось и исправлялось, но исправленная версия программы еще не выпущена. См. обсуждение здесь.

Эта ошибка вызвана флагами компоновщика -Wl,-x, которые premake по умолчанию добавляет в файл makefile project.make. На данный момент есть два возможных решения: загрузить обновленный исходный код предварительной версии с исправлением, скомпилировать его и установить новую версию или вручную изменить значение LDFLAGS в сгенерированном project.make после каждого запуска предварительной версии.

Я также попробовал предложение, которое они дают в ссылке выше, установить premake.tools.gcc.ldflags.flags._Symbols на nil, но это не повлияло на мою систему.

person glampert    schedule 22.07.2014