2013-12-19 78 views
1

我定義源&頭附加庫 - 「MathCore.h」 & 「MathCore.cpp」 MathCore.h如下代碼:如何編譯視覺C++程序與

#ifdef MATHCORE_EXPORTS 
#define MATHCORE_API __declspec(dllexport) 
#else 
#define MATHCORE_API __declspec(dllimport) 
#endif 

MATHCORE_API bool isPowOf_Two(unsigned int n); 
MATHCORE_API bool isFormOf_tpnmo(unsigned int n); 
MATHCORE_API int isolate_LST(int x); 


// This class is exported from the MathCore.dll 
class MATHCORE_API MathEngine { 
public: 
    MathEngine(void); 
    // TODO: add your methods here. 
}; 

extern MATHCORE_API int nMathCore; 

MATHCORE_API int fnMathCore(void); 

和我產生LIB - 「 MathCore.lib「和Visual Studio 2008中相應的dll-」MathCore.dll「,然後我在另一個使用MathCore中定義的函數的文件夾中創建了C++源文件 - 」t.cpp「,爲了簡單起見,我將MathCore.lib和MathCore .dll在同一個文件夾中。 t.cpp如下

#pragma comment(lib, "MathCore.lib") 
#include <iostream> 
#include "MathCore.h" 

using namespace std; 

MATHCORE_API bool isPowOf_Two(unsigned int n); 
MATHCORE_API bool isFormOf_tpnmo(unsigned int n); 

int main() 
{ 

    while(1){ 
    unsigned int x; 
    cin>>x; 
    cout<<isPowOf_Two(x)<<"\n"; 
    cout<<x<<"\n"; 
    } 
    system("Pause"); 
    return 0; 
} 

enter image description here

我的問題是..不使用Visual Studio我想用批處理文件來編譯t.cpp說 - 「的run.bat」 所以我列入「 vcvarsall.bat」和‘VCVARS32.BAT’,以相同的源文件夾,我的‘的run.bat’命令,這樣....

@echo off 
call "vcvarsall.bat" 
call "vcvars32.bat" 
echo off 
cl /O2 t.cpp /link MathCore.lib 
@if ERRORLEVEL == 0 (
goto good 
) 

@if ERRORLEVEL != 0 (
goto bad 
) 

:good 
echo "clean compile" 
echo %ERRORLEVEL% 
goto end 

:bad 
echo "error or warning" 
echo %ERRORLEVEL% 
goto end 

:end 

當我運行‘的run.bat’它創造‘t.obj’沒有「t.exe」我認爲它沒有鏈接MathCore.lib,我想知道如何編譯可視化的C++源代碼和附加的庫,並且包含在命令行中chekc visual studio commandline arguements這不能幫助我解決這個問題。

請人知道確切的COMMANDLINE ARGUEMENTS編譯VISUAL C++源文件所需要庫和頭文件 請參閱http://msdn.microsoft.com/en-us/library/610ecb4h.aspx

+2

,[MSBuild的(http://msdn.microsoft.com/en-us/library/dd293626。 aspx)可能更容易。你可以配置你的項目屬性,讓它在IDE中編譯,然後自動完成構建。 –

+0

我想在不使用Visual Studio的情況下編譯源代碼,我想執行一個蝙蝠並執行這些操作..請幫助..鏈接庫存在問題我提及這些東西 http://msdn.microsoft.com/en-us /library/610ecb4h.aspx –

+0

這就是MSBuild所做的 - 你根本不運行IDE,你可以從'.bat'文件構建。 –

回答

0

沒有khowing實際誤差這將是很難說。

我創建了一個樣本庫並試圖鏈接它。爲了使它工作,我改變了下面的行。

CL/O2 t.cpp /鏈接MathCore.lib

CL/O2 t.cpp/MDD MathCore.lib

會很好如果你運行* .bat(run.bat,在你的情況下)並在這裏粘貼錯誤。

[PS:我不能添加評論,因此添加回復]當你標記與Visual Studio

+0

感謝您的回答。問題是當我刪除 「cout << isPowOf_Two(x)<<」\ n「;」 從我的t.cpp文件中完全編譯並生成「t.exe」,問題是我無法使用MathCore.h中定義的函數,我認爲我的「MathCore.lib」鏈接不好。 –

+0

您是否試過從呼叫者功能中刪除下面的行? MATHCORE_API bool isPowOf_Two(unsigned int n); MATHCORE_API bool isFormOf_tpnmo(unsigned int n); –