A. gcc與diab編譯器的兼容性問題
不好意思剛看到,不同編譯器編譯的結果不能鏈接到一起,理由主要有以下兩方面:一是不同編譯器可能對變數名做不同處理,主要針對c++,好像沒有什麼編譯器對c語言的變數名改變,舉個例子,假設c++中的變數test_var,用兩種不同編譯器編譯完該結果可能是Diab_test_var和GCC_test_var成為不同的變數,那麼對於連接器來說就是不同的變數怎麼會鏈接到一起是吧。c好像不存在文件名問題,但是c會遇到第二個方面。第二個方面就是不同的編譯器會提供一些內部函數比如*(乘以)這個操作在編譯器里有定義,有具體的代碼來實現,如果編譯器不同實現的函數名不同,不會鏈接到一起。當然還有更復雜的原因,可能我也不太了解。這些是我的理解,可能不全,但是可以肯定的是,不同編譯器編譯的二進制文件不能鏈接到一起使用。
至於你說的BSP是風河提供的會不會不兼容的問題,是這樣的。通常對於BSP中的c語言部分,無所謂兼不兼容,因為c語言要是ANSI標準的話所有的編譯器都會支持。BSP中的匯編部分跟編譯器相關,但也是格式上的問題。一般vxworks提供gcc版的bsp(提供不提供其他編譯器的BSP我不清楚,因為我們用的是gcc),所以應該是兼容的。假如真的不提供,可以按照gcc匯編語法,把BSP中的函數和變數以及偽指令部分更改成符合GCC語法即可,整體的匯編不需要更改,這部分工作很小的應該不難。
我知道的就這些,希望能幫到你。
B. 如何解決程序兼容性問題
解決方案/回答
為 Windows Vista 編寫的大多數程序也適用於 Windows 7,但某些舊程序可能運行不佳,或根本無法運行。如果為 Windows 早期版本編寫的程序無法正常運行,則可以嘗試手動或使用程序兼容性疑難解答來更改該程序的兼容性設置。
運行程序兼容性疑難解答的步驟:
1. 單擊「開始」按鈕,然後單擊「控制面板」。
2. 在搜索框中,鍵入「疑難解答」,然後單擊「疑難解答」。
3. 在「程序」下,單擊「運行為以前版本的 Windows 編寫的程序」。
4. 按照疑難解答中的說明進行操作。
如果無法安裝某個程序,請插入該程序的安裝光碟,然後使用疑難解答瀏覽到該程序的安裝文件(通常名為 Setup.exe、Install.exe 或類似名稱)。
C. 易語言用不同版本的VCLinker編譯的程序在不同操作系統上的兼容性問題
易語言在靜態編譯時,不會將該程序所使用的dll文件打包到發布的PE版中,其編譯後的程序在運行時將自動在當前目錄和Windows\system32文件下尋找。
由於XP精簡版沒有這個kernel32.dll文件,所以當你程序所使用的dll文件,在其他操作系統中不存在時, 該程序不能運行。
解決辦法:在發布軟體時,考慮到操作系統是否有本程序使用到的這些dll文件,要將操作系統沒有的dll文件也一且進行發布(可以存放在該發布軟體的執行文件的同一目錄中)
D. java的兼容問題,以下程序為什麼編譯時提示不兼容
import java.awt.Graphics;
import java.applet.Applet;
class MyException extends Exception {
public MyException() {
}
public MyException(String msg) {
super(msg);
}
}
class Fushu1 {
double Rez = 0;
double Imz = 0;
double D = 0;
public Fushu1(double a, double b) {
Rez = a;
Imz = b;
D = Math.sqrt(Rez * Rez + Imz * Imz);
}
public void disp(int x, int y, Graphics g) {
String s1 = new Float(Rez).toString();
String s2 = new Float(Imz).toString();
String s3 = new Float(D).toString();
g.drawString(" " + s1 + "+(" + "" + s2 + ")i" + " " + s3+ " ", x, y);
}
}
class Fushu1Add {
Fushu1 A = null;
Fushu1 B = null;
Fushu1 C = null;
Fushu1Add(Fushu1 mtx_z, Fushu1 mtx_v) {
A = mtx_z;
B = mtx_v;
C = new Fushu1(0, 0);
}
public Fushu1 Add() {
C.Rez = A.Rez + B.Rez;
C.Imz = A.Imz + B.Imz;
C.D = Math.sqrt(C.Rez * C.Rez + C.Imz * C.Imz);
return C;
}
}
class Fushu1Multiply extends Fushu1Add {
Fushu1Multiply(Fushu1 mtx_z, Fushu1 mtx_v) {
super(mtx_z, mtx_v);
}
public Fushu1 Multiply() {
C.Rez = A.Rez * B.Rez - A.Imz * B.Imz;
C.Imz = A.Rez * B.Imz + B.Rez * A.Imz;
C.D = Math.sqrt(C.Rez * C.Rez + C.Imz * C.Imz);
return C;
}
}
class Fushu1Division extends Fushu1Add {
Fushu1Division(Fushu1 mtx_z, Fushu1 mtx_v) {
super(mtx_z, mtx_v);
}
public Fushu1 Division() {
C.Rez = (A.Rez * B.Rez + A.Imz * B.Imz)
/ (B.Rez * B.Rez + B.Imz * B.Imz);
C.Imz = (A.Imz * B.Rez - A.Imz * B.Rez)
/ (B.Rez * B.Rez + B.Imz * B.Imz);
C.D = Math.sqrt(C.Rez * C.Rez + C.Imz * C.Imz);
return C;
}
public void disp(int x, int y, Graphics g) {
String s1 = new Float(C.Rez).toString();
String s2 = new Float(C.Imz).toString();
String s3 = new Float(C.D).toString();
g.drawString(" " + s1 + "+(" + "" + s2 + ")i" + " " + s3
+ " ", x, y);
}
}
public class TestMyException3 extends Applet {
Fushu1 mtx_z, mtx_v, mtx_e, mtx_a, mtx_b;
Fushu1Add mum;
Fushu1Multiply mtxmul;
Fushu1Division cf;
public void init() {
mtx_z = new Fushu1(4.0, 3.0);
mtx_v = new Fushu1(0.0, 0.0);
mum = new Fushu1Add(mtx_z, mtx_v);
cf = new Fushu1Division(mtx_z, mtx_v);
mtxmul = new Fushu1Multiply(mtx_z, mtx_v);
mtx_a = mum.Add();
mtx_e = mtxmul.Multiply();
mtx_b = cf.Division();
}
public void paint(Graphics g) {
mtx_z.disp(5, 10, g);
mtx_v.disp(5, 70, g);
mtx_e.disp(5, 130, g);
mtx_a.disp(5, 180, g);
try {
mtx_b.disp(5, 230, g);
} catch (ArithmeticException e) {
g.drawString("chengxuyouwenti", 5, 300);
} catch (Exception e) {
g.drawString(e.getMessage(), 5, 250);
}
}
}
E. 不同的c語言編譯系統差別在哪裡代碼是否 存在兼容性的問題
ANSI
C
一般都可以支持,但也涉及到不同版本的C標準的兼容性問題,比如VC6不支持C99,VS2003,2005,2008,20120等就可以部分支持C99標准;而且很多標准並沒有規定實現,不同的編譯器實現可能不同,比如C標准只規定了short<=int<=long,但並沒有規定位元組數,導致不同的編譯器數據類型的大小各不相同。
非
ANSI
C標準的話,不同的編譯器一般都有不同的實現,需要分別實現。
在移植到不同編譯器的時候這些都要注意處理,比較常規的做法是數據類型和函數等自己根據不同編譯器封裝成一個統一的格式,在程序中使用封裝後的數據類型或函數,而不要使用原生類型,這樣在移植時只需要在封裝的地方根據編譯器的不同進行修改就可以了,不需要再修改源代碼。
F. VC++6.0在編譯程序時顯示此程序存在兼容性問題,怎麼解決
右鍵應用程序,屬性,設置兼容模式,以管理員方式運行。
G. vc++6.0在win8下編譯時總提示存在兼容性問題
由於這個軟體太舊,請樓主換新版(VS2013),或者換回XP、2000或者98。
H. 我下載了一個編譯器,但有兼容性問題 ,怎麼解決,急,親
你這么問問題,太好玩了,有沒有路過的神仙猜到他的編譯器碰到了怎麼個兼容性問題?
I. 在Microsoft visual C++ 6.0上寫的程序出現兼容性問題是編程錯誤還是版本問題
是版本問題
visual
C++
6.0
的程序主要是在
Win98
上運行,其它版本局部功能會不兼容,例如:
VC6
的程序的文檔關聯功能在Win7平台上就不兼容。其實,主要取決於你調用的是兼容或不兼容的函數
J. 怎樣解決C++編譯為exe的兼容性問題
這個沒有啥辦法的,VC對.net framework的依賴很嚴重,你必須安裝相應庫
你最多能做的是必須編譯成release版本,這樣除了.net framework之外不需要額外安裝了。
這不是C++特有的,java之類的語言一樣需要管理dependencies,不是可以規避的不利