3

premake を使用してメイン プログラムとの外部ライブラリ リンクを取得できません。たとえば、この問題を次の例に単純化しました。

./_external/ext.cpp

#include "ext.h"
int foo()
{
    return 4;
}

./_external/ext.h

#pragma once
int foo();

./main.cpp

#include "stdio.h"
#include "_external/ext.h"

int main()
{
    printf("%d", foo());
    return 0;
}

./premake4.lua

solution "Test"
    configurations { "Release", "Debug" }

project "TestMain"
    language "C++"
    kind "ConsoleApp"

    files "main.cpp"

    links
    {
        "_external/libfoo.a"
    }

Cygwin 環境で GNU makefile を作成します。

$ ./premake4.exe gmake
Building configurations...
Running action 'gmake'...
Generating Makefile...
Generating TestMain.make...
Done.

作成すると次のエラーが表示されます。

$ make
==== Building TestMain (release) ====
Linking TestMain
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find -lD:/test/_external/libfoo.a
collect2: ld returned 1 exit status
TestMain.make:93: recipe for target `TestMain.exe' failed
make[1]: *** [TestMain.exe] Error 1
Makefile:16: recipe for target `TestMain' failed
make: *** [TestMain] Error 2

私が見つけた唯一の回避策は、「 links」の代わりに「 linkoptions 」を使用して「-l」を取り除くことですが、私にとっては解決策というよりはハックのようなものです。

4

1 に答える 1

1

あなたは正しくやっていますが、Premake は間違っています。Premake の makefile ジェネレーターには、正しくリンクできないというバグがありました。これは現在、stable (バージョン 4.4 になる予定) およびdev (5.0 になる予定) リポジトリの両方で修正されています。

解決できてよかったです。お役に立てば幸いです。

于 2013-01-29T15:30:54.813 に答える