none
[求救]請問error LNK1112的問題 RRS feed

  • 問題

  •  

    大家好,我剛剛接觸EVC不久的新手
    我的開發環境是EVC++4.0 +SP4 +Pocket PC 2003


    我在編譯的時候沒有任何錯誤

    但在Build的階段出現下面錯誤

     

    RFIDAPI.lib(RFIDAPI.dll) : fatal error LNK1112: module machine type 'THUMB' conflicts with target machine type 'X86'

     

    上網查了相關的訊息,好像是要將/MACHINE:X86 改成 /MACHINE:THUMB
    但又跑出下列錯誤

     

    .\emulatorDbg\StdAfx.obj : fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'THUMB'

     

    到了這邊我就不知道如何解決錯誤了!!

    不知道有沒有人知道該怎麼解決呢?

    2007年10月31日 上午 09:25

所有回覆

  • HI,

     

    請問您有將RFIDAPI.lib連結到您的專案中嗎?

     

    tihs

     

    2007年11月1日 上午 05:06
  • 好像還是類似的問題

    你的 stdafx.cpp 沒有被 compile 成 ARM mode but x86.

    可能要 check 一下所有的 setting 吧.

    然後 make sure 那些不豈眼的 message 在 compile 時是確定用 ARM 的 compiler (clarm.exe) not x86 (cl.exe)

     

    2007年11月2日 上午 12:28
  • 你好喔!!!

     

    我有將RFIDAPI.lib設定在專案中的link裡了

    2007年11月2日 上午 01:42
  • K. S. Huang 你好喔!!

    要怎麼去確認compiler用的是何種CPU類型?
    是不是在選擇CPU類型來Debug時,compiler就已經確定了

    如:我是選擇win32(wce emulator) Debug

    還是到Project的屬性裡面,到C/C++頁籤裡確認

    另外我選擇win32(wce ARMV4) Debug

    在Build的階段會跳出一個錯誤視窗

    The Intel 80486 CPU does not support configuration  <檔名:RFIDSample> --
    win32(wce ARMV4) Debug!Executable will not run on device.
    Continue?

    我選擇是,雖然會finished downloading但是會跳出不能執行programe的視窗
    這是不是指因為PC與PDA的CPU類型不同而無法執行?

    但我有把它Build出來的執行檔,放到實體的PDA上去執行,會跳出錯誤視窗
    "找不到'RFIDSample'(或它的某項元件)"

    2007年11月3日 上午 07:28
  • HI,

     

    是的, 在選擇CPU類型來Debug時,compiler就已經確定了要將原始程式COMPILE成那一種CPU可以執行的二進位碼.

    如果執行時找不到RFIDSample, 表示您必須將RFIDSample的DLL檔案放在系統找的到的地方, 例如和應用程式放在同一個目錄下才能夠執行的起來

     

    tihs

    2007年11月3日 上午 07:51
  •  

    this 雷猴阿~~

     

    我確定我有將我的DLL檔和應用程式放再同一個目錄唷

    我的目的是想要寫一個讓實體PDA能讀取tag,show在螢幕上

     

    PDA廠商有附他們的RFIDAPI給我,現在我改用wce ARMV4 Debug,執行可以產生執行檔,沒有error LNK1112的問題

    但在過程中它會跳出,我上面說的錯誤,產生的執行檔也不能執行...

    另外如果我是直接按下compile的話,會跳出一個視窗

    Cannot compile the file 'C:\\Programe Files\Microsoft embedded C++ 4.0\common\evc\Myprojects\testPDA\StdAfx.h';no compile tool is assotiated with the file extention.

     

    為什麼不能compile StdAfx.h?

    2007年11月3日 下午 02:55
  • HI,

     

    您的錯誤訊息看起來像是您的RFIDAPI檔案並不是建置成ARM CPU所能執行的二進位碼, 這可能要問一下廠商, 所提供的二進位碼是給那一種CPU執行的.

     

    另外不能編譯stdafx.h就很奇怪了

     

    tihs

    2007年11月4日 上午 06:35
  •  

    this 你好喔!!

     

    我們跟廠商買了工業用的PDA,它有RFID的功能,廠商也給了他們的API→RFIDAPI.dll,另外也給了RFIDSample的source檔案。我們的目的是要利用它給的API來寫PDA的應用程式。以下我有兩個問題:

     

    1.我們是不是要向廠商問他們的開發環境,例如:evc++ 4.0 +sp4 + 某個SDK,是不是開發環境要跟他們相同才可以在那台PDA上執行?

     

    2.RFIDAPI.dll的建置,舉個例子:

    (1)在evc++ 4.0 +sp4 + pocket pc 2003 sdk +CPU類型:ARMV4 下建置出來

    (2)在evc++ 4.0 +sp4 + WinCE 4.2 sdk + CPU類型:ARMV4 下建置出來

     

    這兩個例子建置出來的RFIDAPI.dll會是相同的嗎?

    2007年11月4日 下午 04:50
  • HI,

     

    能知道廠商開發DLL時使用的環境當然最好了, 避免廠商有用到某個SDK, 造成應用程式執行時找不到而失敗.

    另外搭配Pocket PC 2003 SDK, 或WINCE 4.2 SDK開發的程式會有一點不同, 因為執行的目標環境不同, 環境提供的功能也不完全相同

     

    tihs

     

    2007年11月5日 上午 06:42
  • 取得taret paltform 的 SDK 這是一定要的, 除非你已經對 Windows CE system 很有把握, 不然用異質 platform SDK 所 introduce 的 issue 常會讓人 debugging 不完...

    另外 你要 compiler for your target device, 那就要 build 成 ARM v4 not emulator, PPC 2003 的 Emulator 基本上還是 x86 based emulator, 要到 WM5 開始的 DeviceEmulator 才是 ARM based emulator.

     

    至於你看到的 warning message 那應該沒啥關係...

    到是放到 target device 不能 run, 那應該是你的 target device 有少東西, 應該就是 RFIDAPI.dll and 這個 DLL 應該是要用 PPC 2003 version, (assume your target platform is PPC 2003), Wince 4.2 開始因為就拿到 pure ARMv4 support, 所以 building 出來的 binary 都會是 ARMv4I 也就是 ARM mode binary with Thumb mode interworking ability.

    ARM v4 and V4I 之間仍然存在一些差異性就是了.

     

    而你的 stdafc.h error, 是不是你把 stdafx.h 也當成 source code 來 compiler 了?

    2007年11月6日 下午 10:04
  • K.S. Huang你好:

    我有幾個疑問:

    1.我要如何知道我的PDA是不是PPC 2003 version
    2.為什麼RFIDAPI.dll也必須符合PDA的版本

    3.廠商有給我們RFIDSample的安裝程式,在PDA上安裝完成,應用程式也都能執行,如讀取RFID tag
    我去看他給的.cab檔內除了安裝
    RFIDAPI.dll之外還有其他檔如:awid_sdk_com_ppc.dll和
    Unitech RFID Active Control.unload,是不是我要能在evc上用debug模式執行成功也要這些其它元件在?
    因為現在若是用Release模式是可以成功在PDA上執行

    4.你說要取得
    taret paltform 的 SDK是指廠商開發時的SDK嗎?
    我一直不懂是不是因為應用程式要使用PDA上的RFID reader所以開發時的SDK一定要與廠商相同,如果應用程式不用使用到PDA上任何硬體,是不是就可以由微軟提供的SDK來開發應用程式?
    2007年11月7日 下午 07:29
  • 進去 Control Panel 的 About 應該看得到

    不然用 GetVersionEx, IOCTL_HAL_GET_DEVICE_INFO or SystemParametersInfo 等 API 也都可以取得這一類的 info.

     

    至於板本的問題, WM5 and WM2003 之間因為 Compiler/Linker option 已經從 pure ARM mode (ARMv4) 變成 ARM mode with Thumb mode interworking ability (ARM v4i), 不管是 PE header or generated binary 本身 (最典型例子就是 function return 時 ARMv4 會用 b lr 而 v4i 會用 bx lr instruction)都已經變了, 而因為你的 App rely on RFIDAPI.dll, 只要你的 RFIDAPI.dll OS loader 不給 loading, 也會連帶你的 App 也會 loaded failure (因為你的 applicaiton 跟 DLL 之間應該是用 early binding).

     

    不過基本上 你 release mode 可以 run 的話, 這些 external DLL 應該是沒有啥問題, 除非你 debug and retail mode, binding 的 DLL or Compiler/Linker option 設得不一樣.

     

    Regarding to SDK, 假如是 PPC platform, 那基本上就會存在標準 SDK 但是 你是用 WM2003, WM5 WM6... 每個 platform 都會有專屬的 SDK, 請務必取得該 SDK, 存取 platform H/W resource 基本上跟這就沒啥關系了. 但假如你是用 Windows CE, 因為 platform building 時, option 會差異頗大, 所以幾乎每個 paltform 都會有其伴隨而來的 SDK (it could be generated by platform builder), 至於你的 case, 除了要取得 platform SDK (should be WM2003), 此外還需要取得 RFID 那邊的 SDK, 不過 RFID 那邊的 SDK 可能就只是幾個 header file, 一些 DLL 的 stub library, 頂多再一些 sample code.

    2007年11月8日 下午 11:37