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,不是可以规避的不利