首頁  >  問答  >  主體

c++ - 32位编译器编译的库和64位编译器编译的库相互兼容吗?

64位编译器编译的指针是8bits 32位编译器编译的指针为4bits 如果一个程序里面同时用到了64位和32位的库(比如64位的Qt和32位编译器编译的boost cl.exe貌似默认就是32位 但好像没和64位qt起冲突) 它俩会不会不兼容? 求大神给我讲讲 64位 32位 除了能取更多的内存地址 还有什么要注意的。。。

天蓬老师天蓬老师2764 天前1262

全部回覆(3)我來回復

  • 高洛峰

    高洛峰2017-04-17 13:01:07

    32位元的函式庫向上相容應該沒什麼問題吧
    64位元向下相容基本上很難
    幾點要注意的
    第一移動指標指標長度要sizeof 這樣重新編譯就不需要改動了
    第二其實和1很像long在64 相當於32的long long 64位下long賦值給int就掛了越界還有指針也不要賦給整形也會掛
    第三彙編代碼如果你嵌入了彙編可能無法相互相容

    這樣說吧 最好是 你得庫可以支援 64和 32的編譯

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 13:01:07

    一般來說32位元的函式庫可以在64位元上使用(有例外情況,比如說將指標位址儲存為數字型別的時候,如果用int型在64位元上就會溢位),但是64位元的庫無法在32位上使用

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 13:01:07

    32的流程只能載入32位元的函式庫,64位元的行程只能載入64位元的函式庫。 32位元通常是指標的長度為4個位元組,而不是4bits,cpu能夠一條指令寫4個位元組;64位元的,cpu可以一條指令搞定8個位元組。在x86系列(包含x86_64)的cpu的Windows上,32位元的行程可以跑在64位元的作業系統上,64位元的只能在64位元的作業系統上。
    你說的64的qt和32位元編譯的boost,其中64位元是不是指的是qt creator?
    你確定你使用的qt函式庫是64位元的,boost是x86編譯的?這是不可能混用的

    回覆
    0
  • 取消回覆