- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我不太熟悉 C 语言的编译,所以如果我没有提供足够的信息,请让我知道您需要我发布什么!
总结如下:我需要在一台有点旧的 IBM AIX 计算机上以 C 的目标语言运行 ANTLR。我很快放弃了使用 IBM CC/make utils 进行编译,并在机器上安装了 gcc (4.2) 和 GNU make 版本。问题是,虽然配置脚本确实检测到正确的架构,但它似乎没有做出适当的响应。
我使用的ANTLR具体版本是3.2版,C目标。实际检测到的目标是powerpc-ibm-aix-5.3.0.0
这是我所做的。我看到的第一个明显错误是它在选项中添加了“-m32”标志。好的,我可以很简单地从 makefile 中删除它,在这种情况下 gcc 应该默认为 -maix32。
第二个问题:我收到一条错误消息,给出了 stdio.h 的路径并提示“错误:重复‘unsigned’”。好的,所以配置在自动生成的 antlr3config.h 文件中做了一个“定义”语句……我可以注释掉它,错误就消失了。
第三个问题...这是我卡住的地方。
/opt/freeware/bin/make all-am
make[1]: Entering directory `/scrubber/libantlr3c-3.2'
if /bin/sh ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I. -Iinclude -O2 -Wall -MT antlr3baserecognizer.lo -MD -MP -MF ".deps/antlr3baserecognizer.Tpo" -c -o antlr3baserecognizer.lo `test -f 'src/antlr3baserecognizer.c' || echo './'`src/antlr3baserecognizer.c; \
then mv -f ".deps/antlr3baserecognizer.Tpo" ".deps/antlr3baserecognizer.Plo"; else rm -f ".deps/antlr3baserecognizer.Tpo"; exit 1; fi
gcc -DHAVE_CONFIG_H -I. -I. -I. -Iinclude -O2 -Wall -MT antlr3baserecognizer.lo -MD -MP -MF .deps/antlr3baserecognizer.Tpo -c src/antlr3baserecognizer.c -o antlr3baserecognizer.o
In file included from include/antlr3baserecognizer.h:39,
from src/antlr3baserecognizer.c:9:
include/antlr3defs.h:343: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ANTLR3_SALENT'
make[1]: *** [antlr3baserecognizer.lo] Error 1
make[1]: Leaving directory `/scrubber/libantlr3c-3.2'
make: *** [all] Error 2
这是指向 ANTLR 库中包含的特定 antlr3defs.c 文件的链接:https://docs.google.com/file/d/0B9XS1f8YfyB4cFJRZTdWM1pMWWs/edit?usp=sharing
哦,我可以在其他平台上编译它,比如 Ubuntu 或 Cygwin(虽然我不能将它们用于此任务)。不过,我对 AIX 并不十分熟悉,并且在编译 C 程序方面经验有限。也许我需要用配置脚本设置一些东西?
谢谢!
编辑:取得了进展,因此更新这篇文章以将信息放在一起。
我能够通过在运行配置脚本时添加 --disable-abiflags 选项来解决上述错误...此选项删除 -m32 和 -m64 gcc 标志。它允许 configure 脚本正常工作,但在运行 make 时让汇编器有点困惑。为了给它提供指导,我在 Makefile 中向 CFLAFS 添加了 -Wa,-a32 标志,从而让汇编器知道我想要 32 位。
只剩下一期了。
ar cru .libs/libantlr3c.a antlr3baserecognizer.o antlr3basetree.o antlr3basetreeadaptor.o antlr3bitset.o antlr3collections.o antlr3commontoken.o antlr3commontree.o antlr3commontreeadaptor.o antlr3commontreenodestream.o antlr3convertutf.o antlr3cyclicdfa.o antlr3debughandlers.o antlr3encodings.o antlr3exception.o antlr3filestream.o antlr3inputstream.o antlr3intstream.o antlr3lexer.o antlr3parser.o antlr3rewritestreams.o antlr3string.o antlr3stringstream.o antlr3tokenstream.o antlr3treeparser.o antlr3ucs2inputstream.o
ar: 0707-128 The OBJECT_MODE environment variable has an invalid setting.
OBJECT_MODE must be 32, 64, 32_64, d64 or any.
make[1]: *** [libantlr3c.la] Error 1
问题是,我将其设置为什么并不重要。我试过在没有设置的情况下运行 make,然后使用 export 来设置它:
export OBJECT_MODE=32
我可以输入 echo $OBJECT_MODE,它确实会打印出 32... 但是当我运行 make 时它似乎没有检测到它。
我能够通过编辑“libtool”脚本来解决这个问题,将“-X 32”添加到 ar 选项以覆盖它正在读取的任何内容。长期解决方案可能是 ltmain.sh 并重新运行配置。
最佳答案
这是有问题的行:
typedef socklen_t ANTLR3_SALENT;
因为 socklen_t
没有定义你不能 typedef
它,包括 socket.h
应该修复它
#include <sys/socket.h>
编辑:再次查看该文件后,如果您运行配置脚本,应该包含 socket.h
#ifdef HAVE_SOCKET_H
# include <socket.h>
#else
# if HAVE_SYS_SOCKET_H
# include <sys/socket.h>
# endif
#endif
关于为 AIX 编译 ANTLR 3C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15888992/
我在AIX上使用shell脚本。 我已经使用chmod授予了执行权限 不过,我收到以下错误: ksh: ./getcwd.exe: 0403-006 Execute permission denied
我找不到 objdump IBM AIX 5.1 机器中的命令。实际上,我想从 AIX 中生成的库中获取汇编指令(反汇编)。 Linux 有 objdump命令和solaris dis命令来执行此操作
我需要在 AIX 环境中编写一个 C 程序,它会给我进程名称。 我可以根据 pid 获取 pid 但不能获取进程名称。 aix 环境中可用的任何特定系统调用? 谢谢 最佳答案 getprocs 很可能
在 AIX 上,我会运行: ar -X32 -t libdb2.a 并检查输出以确定存档中是否有 32 位对象。与 -X64 类似,用于检查 64 位对象。但是,如果我在另一个平台上,并且需要检查存档
我们需要将许多使用 Sun JDK 构建并在 Solaris 10 中的 sun JRE 上运行的 Java 应用程序迁移到 AIX。 我们担心该应用程序在 IBM J9 JRE 上的运行情况相同。
我有一些类似于以下的代码: #include #include #include #include #include #include #include #include #inclu
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我使用的是 AIX 5.3,而且我对该操作系统完全是菜鸟。我想知道 AIX 上是否有类似 inotify 的东西,以便可以监视目录和文件的更改而不是轮询。我将从 Java 中执行此操作,因此使用 Ja
AIX 中的交换信息命令:lsps -a AIX 中的交换信息输出: Page Space Physical Volume Volume Group Size %Used Acti
我有手动运行良好的脚本,但在通过 cronjob 运行时没有获得所需的输出。如果脚本有任何问题,请告诉我。 #!/usr/bin/ksh file1=$(find *-* -mtime 1) file
我正在尝试在 IBM AIX 中编译一些 C 代码,但它似乎在函数指针方面存在一些严重问题。 以下是一些无法编译的代码: typedef int (*strategy_fn)(const unsign
我有一个 C 程序 hello.c。我创建了一个共享对象 hello.so。 hello.c 和 hello.so 分别位于目录/u/grv/program/hello.c/u/grv/objects
当运行使用 -pthread 编译的代码时抛出 C++ 异常时,我们会中止。 平台:AIX 5.3 技术等级 8编译器:gcc 3.4.6链接器:AIX 链接器 1.65.2.4 测试代码: // e
我从 Centos 6 通过 ssh 连接到 AIX 5.3。AIX 和 Centos 上的 shell 是 bash。当我在 shell 中按“Home”、“End”、“PgUp”、“PgDn”时,
我运行了 lparstat 命令并得到了这个输出。需要知道要解析哪个字段以获得总体 CPU 分配、CPU 使用率、此 AIX 服务器的空闲 CPU 以及如何解析该信息。 System configur
谁能推荐可用于以编程方式检查内存使用情况的 AIX 系统调用?我正在使用一个大型多线程 C++ 应用程序,该应用程序当前由于存在大量无限的内存缓存而内存不足(在 AIX 6.1 上使用 32 位大内存
我在 AIX 6.1 上运行此代码 while(true) { int a = rand(); //generate a random integer value void* test
xmalloc只有当我编写AIX内核扩展时才能在进程环境中使用。 AIX 中中断环境可以调用哪些内存分配函数? 谢谢。 最佳答案 网络内存分配例程。查看/usr/include/net/net_mal
我在 AIX 上工作,有一个进程不断崩溃。我从未检查过核心文件,如果可能的话,我希望得到一些指导。我正在使用 dbx。我如何才能 (a) 确保核心文件到达我希望它到达的位置,以及 (b) 在崩溃之前查
通过执行一个简单的循环创建线程java程序,当我使用 -Xmx2048M 时,AIX 的线程计数限制约为 900,当我将该参数减少到 -Xmx1024M 时,线程计数限制增加到 2000 左右。 ul
我是一名优秀的程序员,十分优秀!