【问题标题】:'_nextafter' not declared : CGAL in Qt Creator with Windows 8.1'_nextafter' 未声明:带有 Windows 8.1 的 Qt Creator 中的 CGAL
【发布时间】:2015-04-17 12:02:06
【问题描述】:

我已经按照here 的解释构建了 CGAL。

一切顺利。

但现在,我将 Qt Creator 与 CGAL 一起使用。

我已将库包含在 .pro 文件中:

QT       += core

QT       -= gui

TARGET = TestCCGALAppliConsole
CONFIG   += console
CONFIG   -= app_bundle
CONFIG += c++11

TEMPLATE = app

INCLUDEPATH += /usr/local/include
DEPENDPATH  += /usr/local/include
LIBS        += -L/usr/local/include

macx: LIBS += -L/usr/local/lib/ -lgmp
macx: LIBS += -L/usr/local/lib/ -lmpfr
macx: LIBS += -L/usr/local/lib/ -lCGAL

SOURCES += main.cpp

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../local/CGAL-4.6/build/lib/release/ -lCGAL-vc100-mt-gd-4.6
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../local/CGAL-4.6/build/lib/debug/ -lCGAL-vc100-mt-4.6

INCLUDEPATH += $$PWD/../../../../local/CGAL-4.6/build/lib/Debug
DEPENDPATH += $$PWD/../../../../local/CGAL-4.6/build/lib/Debug

INCLUDEPATH += C:\local\CGAL-4.6\include

win32: LIBS += -L$$PWD/../../../../local/CGAL-4.6/auxiliary/gmp/lib/ -llibgmp-10

INCLUDEPATH += $$PWD/../../../../local/CGAL-4.6/auxiliary/gmp/include
DEPENDPATH += $$PWD/../../../../local/CGAL-4.6/auxiliary/gmp/include

win32: LIBS += -L$$PWD/../../../../local/CGAL-4.6/auxiliary/gmp/lib/ -llibmpfr-4

INCLUDEPATH += $$PWD/../../../../local/CGAL-4.6/auxiliary/gmp/include
DEPENDPATH += $$PWD/../../../../local/CGAL-4.6/auxiliary/gmp/include


win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../local/boost_1_57_0/lib64-msvc-10.0/ -lboost_system-vc100-mt-1_57
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../local/boost_1_57_0/lib64-msvc-10.0/ -lboost_system-vc100-mt-gd-1_57

INCLUDEPATH += $$PWD/../../../../local/boost_1_57_0/lib64-msvc-10.0
DEPENDPATH += $$PWD/../../../../local/boost_1_57_0/lib64-msvc-10.0

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../local/boost_1_57_0/lib64-msvc-10.0/ -lboost_thread-vc100-mt-1_57
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../local/boost_1_57_0/lib64-msvc-10.0/ -lboost_thread-vc100-mt-gd-1_57

INCLUDEPATH += $$PWD/../../../../local/boost_1_57_0/lib64-msvc-10.0
DEPENDPATH += $$PWD/../../../../local/boost_1_57_0/lib64-msvc-10.0

INCLUDEPATH += C:\local\boost_1_57_0

在我的 main.cpp 中有:

#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Polyhedron_3.h>
#include <CGAL/Polyhedron_items_with_id_3.h>
#include <CGAL/IO/Polyhedron_iostream.h>

#include <iostream>
#include <fstream>

typedef CGAL::Exact_predicates_inexact_constructions_kernel         K;
typedef CGAL::Polyhedron_3<K, CGAL::Polyhedron_items_with_id_3>     Polyhedron;
typedef Polyhedron::Vertex_iterator                                     Vertex_iterator;

int main() {

    Polyhedron mesh;
    std::ifstream input("inner.off");

    if ( !input || !(input >> mesh) || mesh.empty() )
    {
        //Debug
        std::cerr << "Not a valid off file." << std::endl;
        return 0;
    }

    for (Vertex_iterator v = mesh.vertices_begin() ; v!= mesh.vertices_end() ; ++v )
    {
        std::cout << v->point() << std::endl;
    }

    std::cout << "Hello You" << std::endl;

    return 0;
}

当我编译时(使用 MinGW 4.9.1 32 位和 Qt 5.4.1)我遇到了这个错误:

C:\local\CGAL-4.6\include\CGAL\double.h:191: erreur : '_nextafter' 是 未在此范围内声明 return _nextafter(d1, d2); // 工作于 至少对于 VC++-7.1

我不知道出了什么问题...

你能帮帮我吗?

编辑

似乎使用 Visual Studio C++ Compiler 10 编译的 CGAL 涉及我必须使用此编译器而不是 MinGW 进行编译。

所以我更改了编译,我现在在 Qt Creator 中使用 Microsoft Visual C++ Compiler 10 (amd64),但它仍然无法正常工作。我有一个错误:

无法打开“CGAL-vc100-mt-4.6.lib”文件

这是完整的错误(抱歉,法语版本...):

 17:42:15: Exécution des étapes pour le projet TestCCGALAppliConsole...
 17:42:15: Configuration inchangée, étape qmake sautée.
 17:42:15: Débute : "C:\Qt\Tools\QtCreator\bin\jom.exe" 
    C:\Qt\Tools\QtCreator\bin\jom.exe -f Makefile.Debug
    cl -c -nologo -Zm200 -Zc:wchar_t -Zi -MDd -GR -W3 -w34100 -w34189 -EHsc /Fddebug\TestCCGALAppliConsole.pdb -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -I"..\TestCCGALAppliConsole" -I"." -I"\usr\local\include" -I"..\..\..\..\local\CGAL-4.6\build\lib\Debug" -I"..\..\..\..\local\CGAL-4.6\include" -I"..\..\..\..\local\CGAL-4.6\auxiliary\gmp\include" -I"..\..\..\..\local\CGAL-4.6\auxiliary\gmp\include" -I"..\..\..\..\local\boost_1_57_0\lib64-msvc-10.0" -I"..\..\..\..\local\boost_1_57_0\lib64-msvc-10.0" -I"..\..\..\..\local\boost_1_57_0" -I"..\..\..\..\Qt\qt-5.4.1-x64-msvc2010-rev1\qt-5.4.1-x64-msvc2010-rev1\include" -I"..\..\..\..\Qt\qt-5.4.1-x64-msvc2010-rev1\qt-5.4.1-x64-msvc2010-rev1\include\QtCore" -I"debug" -I"..\..\..\..\Qt\qt-5.4.1-x64-msvc2010-rev1\qt-5.4.1-x64-msvc2010-rev1\mkspecs\win32-msvc2010" -Fodebug\ @C:\Users\Raphael\AppData\Local\Temp\main.obj.1988.32.jom
 main.cpp
echo 1 /* CREATEPROCESS_MANIFEST_RESOURCE_ID */ 24 /* RT_MANIFEST */ "debug\\TestCCGALAppliConsole.exe.embed.manifest">debug\TestCCGALAppliConsole.exe_manifest.rc
if not exist debug\TestCCGALAppliConsole.exe if exist debug\TestCCGALAppliConsole.exe.embed.manifest del debug\TestCCGALAppliConsole.exe.embed.manifest
if exist debug\TestCCGALAppliConsole.exe.embed.manifest copy /Y debug\TestCCGALAppliConsole.exe.embed.manifest debug\TestCCGALAppliConsole.exe_manifest.bak
link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:CONSOLE "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST /MANIFESTFILE:debug\TestCCGALAppliConsole.exe.embed.manifest /OUT:debug\TestCCGALAppliConsole.exe @C:\Users\Raphael\AppData\Local\Temp\TestCCGALAppliConsole.exe.1988.5000.jom
 LINK : fatal error LNK1104: impossible d'ouvrir le fichier 'CGAL-vc100-mt-4.6.lib'
 jom: C:\Users\Raphael\Desktop\build-TestCCGALAppliConsole-Desktop_Qt_5_4_1_MSVC2010_x64-Debug\Makefile.Debug [debug\TestCCGALAppliConsole.exe] Error 1104
 jom: C:\Users\Raphael\Desktop\build-TestCCGALAppliConsole-Desktop_Qt_5_4_1_MSVC2010_x64-Debug\Makefile [debug] Error 2
 17:42:21: Le processus "C:\Qt\Tools\QtCreator\bin\jom.exe" s'est terminé avec le code 2.
 Erreur lors de la compilation/déploiement du projet TestCCGALAppliConsole (kit : Desktop Qt 5.4.1 MSVC2010 x64)
 When executing step "Make"
 17:42:21: Temps écoulé : 00:05.

【问题讨论】:

  • mingw 是否以任何名称提供nextafter 功能? __builtin_nextafter 是我想到的,但我什至不确定它是否会起作用。
  • 您是如何确切构建 CGAL 的? -std=c++11 在任何时候都涉及吗?这可以解释它(你想要 -std=gnu++11 代替)。
  • 等等,你链接的指令是用 Visual Studio 编译 CGAL,现在你希望用 mingw 来使用结果?这没有意义……
  • 我现在正在使用 Microsoft Visual C++ Compiler 10.0 (amd64) 但它仍然无法工作:无法打开 'CGAL-vc100-mt-4.6.lib' 文件 使用 mingw 时,图书馆是开放的……

标签: c++ windows-8.1 qt-creator cgal


【解决方案1】:

嗯,它就在你的消息中:

当我编译时(使用 MinGW

至少适用于 VC++-7.1

_nextafter 是 CGAL 使用的 Microsoft 扩展。 MinGW 似乎不支持它。

【讨论】:

  • 意思是我得用Qt Creator中的Microsoft Visual C++ Compiler编译?
  • 其实整个CGAL项目从来没有用MinGW测试过,看来确实有一些编译错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
相关资源
最近更新 更多