Integrated Development Environments / RAD tools / GUI-builders on Linux

本文列举了大量在Linux平台上可用的集成开发环境(IDE),涵盖了多种编程语言,如C/C++、Java、Python等,并介绍了这些IDE的特点。

Integrated Development Environments / RAD tools / GUI-builders on Linux:



http://linuxmafia.com/faq/Devtools/ides.html

Warning: Some of the above are binary-only and x86-Linux-only.




To explain the context of this page: It came about really just as a small exercise in understated online rhetoric, the need for which long ago vanished.

That is, through the middle of the 1990s, you could not go onto online discussion media without encountering some dumbasses arguing that the Linux operating system was useless for developers and end-users alike, and one of the very most common talking points was the allegation that there were 'no IDEs for Linux'. This was a ritualised argument: The hapless Linux enthusiast typically fell straight into the intended trap and said 'Well, actually, you're far better off using emacs and gdb as your development environment [blah blah].' The critic then triumphantly pronounced his/her point conceded and posted yet another 50-line screed about how $SOMEONES_FAVOURITE_PROPRIETARY_OS was clearly better and Linux would be useless for decades.

These ritualised disputations annoyed me, because they cluttered up otherwise useful online media such as the non-advocacy parts of the comp.os.linux.* Usenet newsgroups. So, I found myself involuntarily thinking about the issue, and suddenly one day thought: 'Wait. What IDEs are there actually for developers on Linux?'

I spent a couple of hours researching the problem, came up with about 50 of them, and inserted them as a new item into my personal 'rants' pages. Then, the next five times I saw one of the usual suspects asking rhetorically 'Oh yeah? What IDEs are there on Linux?' I just posted the URL with the comment 'Here y'are.'

Oddly enough, it took only about five postings of that URL to Usenet and other places, and the entire debate point disappeared completely off the Internet. People simply stopped making the allegation. So, basically, my rants/FAQ item did its job.

Much later, I moved that 'rants' item to its own separate page and kept adding new items to it — but the underlying original reason for the page's existence no longer exists.


cmd_tools/lib/rsa/rsa-sign.o := cc -Wp,-MD,tools/lib/rsa/.rsa-sign.o.d -O2 -DCONFIG_FIT_SIGNATURE -include /eap/3test/toolchain/mkimage/include/libfdt_env.h -I/eap/3test/toolchain/mkimage/include -I/eap/3test/toolchain/mkimage/lib/libfdt -I/eap/3test/toolchain/mkimage/tools -DCONFIG_SYS_TEXT_BASE=0 -DUSE_HOSTCC -D__KERNEL_STRICT_NAMES -D_GNU_SOURCE -c -o tools/lib/rsa/rsa-sign.o tools/lib/rsa/rsa-sign.c source_tools/lib/rsa/rsa-sign.o := tools/lib/rsa/rsa-sign.c deps_tools/lib/rsa/rsa-sign.o := \ /usr/include/stdc-predef.h \ /eap/3test/toolchain/mkimage/include/libfdt_env.h \ /eap/3test/toolchain/mkimage/include/compiler.h \ /usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h \ /usr/lib/gcc/x86_64-linux-gnu/9/include/stdint.h \ /usr/include/stdint.h \ /usr/include/x86_64-linux-gnu/bits/libc-header-start.h \ /usr/include/features.h \ /usr/include/x86_64-linux-gnu/sys/cdefs.h \ /usr/include/x86_64-linux-gnu/bits/wordsize.h \ /usr/include/x86_64-linux-gnu/bits/long-double.h \ /usr/include/x86_64-linux-gnu/gnu/stubs.h \ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ /usr/include/x86_64-linux-gnu/bits/types.h \ /usr/include/x86_64-linux-gnu/bits/timesize.h \ /usr/include/x86_64-linux-gnu/bits/typesizes.h \ /usr/include/x86_64-linux-gnu/bits/time64.h \ /usr/include/x86_64-linux-gnu/bits/wchar.h \ /usr/include/x86_64-linux-gnu/bits/stdint-intn.h \ /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h \ /usr/include/errno.h \ /usr/include/x86_64-linux-gnu/bits/errno.h \ /usr/include/linux/errno.h \ /usr/include/x86_64-linux-gnu/asm/errno.h \ /eap/3test/toolchain/mkimage/include/asm-generic/errno.h \ /usr/include/x86_64-linux-gnu/bits/types/error_t.h \ /usr/include/stdlib.h \ /usr/include/x86_64-linux-gnu/bits/waitflags.h \ /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ /usr/include/x86_64-linux-gnu/bits/floatn.h \ /usr/include/x86_64-linux-gnu/bits/floatn-common.h \ /usr/include/x86_64-linux-gnu/bits/types/locale_t.h \ /usr/include/x86_64-linux-gnu/bits/types/__locale_t.h \ /usr/include/x86_64-linux-gnu/sys/types.h \ /usr/include/x86_64-linux-gnu/bits/types/clock_t.h \ /usr/include/x86_64-linux-gnu/bits/types/clockid_t.h \ /usr/include/x86_64-linux-gnu/bits/types/time_t.h \ /usr/include/x86_64-linux-gnu/bits/types/timer_t.h \ /usr/include/endian.h \ /usr/include/x86_64-linux-gnu/bits/endian.h \ /usr/include/x86_64-linux-gnu/bits/endianness.h \ /usr/include/x86_64-linux-gnu/bits/byteswap.h \ /usr/include/x86_64-linux-gnu/bits/uintn-identity.h \ /usr/include/x86_64-linux-gnu/sys/select.h \ /usr/include/x86_64-linux-gnu/bits/select.h \ /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h \ /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h \ /usr/include/x86_64-linux-gnu/bits/types/struct_timeval.h \ /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h \ /usr/include/x86_64-linux-gnu/bits/select2.h \ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h \ /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h \ /usr/include/x86_64-linux-gnu/bits/struct_mutex.h \ /usr/include/x86_64-linux-gnu/bits/struct_rwlock.h \ /usr/include/alloca.h \ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \ /usr/include/x86_64-linux-gnu/bits/stdlib.h \ /usr/include/stdio.h \ /usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h \ /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \ /usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \ /usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \ /usr/include/x86_64-linux-gnu/bits/types/__FILE.h \ /usr/include/x86_64-linux-gnu/bits/types/FILE.h \ /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \ /usr/include/x86_64-linux-gnu/bits/types/cookie_io_functions_t.h \ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ /usr/include/x86_64-linux-gnu/bits/stdio.h \ /usr/include/x86_64-linux-gnu/bits/stdio2.h \ /usr/include/string.h \ /usr/include/strings.h \ /usr/include/x86_64-linux-gnu/bits/strings_fortified.h \ /usr/include/x86_64-linux-gnu/bits/string_fortified.h \ /usr/include/x86_64-linux-gnu/sys/mman.h \ /usr/include/x86_64-linux-gnu/bits/mman.h \ /usr/include/x86_64-linux-gnu/bits/mman-map-flags-generic.h \ /usr/include/x86_64-linux-gnu/bits/mman-linux.h \ /usr/include/x86_64-linux-gnu/bits/mman-shared.h \ /usr/include/fcntl.h \ /usr/include/x86_64-linux-gnu/bits/fcntl.h \ /usr/include/x86_64-linux-gnu/bits/fcntl-linux.h \ /usr/include/x86_64-linux-gnu/bits/types/struct_iovec.h \ /usr/include/linux/falloc.h \ /usr/include/x86_64-linux-gnu/bits/stat.h \ /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ /usr/include/byteswap.h \ /usr/include/time.h \ /usr/include/x86_64-linux-gnu/bits/time.h \ /usr/include/x86_64-linux-gnu/bits/timex.h \ /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h \ /usr/include/x86_64-linux-gnu/bits/types/struct_itimerspec.h \ /eap/3test/toolchain/mkimage/include/linux/types.h \ $(wildcard include/config/uid16.h) \ /eap/3test/toolchain/mkimage/include/linux/posix_types.h \ /eap/3test/toolchain/mkimage/include/linux/stddef.h \ /usr/include/x86_64-linux-gnu/asm/posix_types.h \ /usr/include/x86_64-linux-gnu/asm/posix_types_64.h \ /usr/include/asm-generic/posix_types.h \ /usr/include/x86_64-linux-gnu/asm/bitsperlong.h \ /usr/include/asm-generic/bitsperlong.h \ $(wildcard include/config/64bit.h) \ /usr/lib/gcc/x86_64-linux-gnu/9/include/stdbool.h \ /eap/3test/toolchain/mkimage/lib/rsa/rsa-sign.c \ /eap/3test/toolchain/mkimage/tools/mkimage.h \ /eap/3test/toolchain/mkimage/tools/os_support.h \ /eap/3test/toolchain/mkimage/include/compiler.h \ /usr/include/x86_64-linux-gnu/sys/stat.h \ /usr/include/x86_64-linux-gnu/bits/statx.h \ /eap/3test/toolchain/mkimage/include/linux/stat.h \ /eap/3test/toolchain/mkimage/include/linux/types.h \ /usr/include/x86_64-linux-gnu/bits/statx-generic.h \ /usr/include/x86_64-linux-gnu/bits/types/struct_statx_timestamp.h \ /usr/include/x86_64-linux-gnu/bits/types/struct_statx.h \ /usr/include/unistd.h \ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ /usr/include/x86_64-linux-gnu/bits/environments.h \ /usr/include/x86_64-linux-gnu/bits/confname.h \ /usr/include/x86_64-linux-gnu/bits/getopt_posix.h \ /usr/include/x86_64-linux-gnu/bits/getopt_core.h \ /usr/include/x86_64-linux-gnu/bits/unistd.h \ /usr/include/x86_64-linux-gnu/bits/unistd_ext.h \ /eap/3test/toolchain/mkimage/include/u-boot/sha1.h \ /eap/3test/toolchain/mkimage/tools/fdt_host.h \ /eap/3test/toolchain/mkimage/tools/../include/libfdt.h \ /eap/3test/toolchain/mkimage/include/libfdt_env.h \ /eap/3test/toolchain/mkimage/include/fdt.h \ /eap/3test/toolchain/mkimage/tools/../include/fdt_support.h \ $(wildcard include/config/of/libfdt.h) \ $(wildcard include/config/has/fsl/dr/usb.h) \ $(wildcard include/config/has/fsl/mph/usb.h) \ $(wildcard include/config/sys/fsl/sec/compat.h) \ $(wildcard include/config/pci.h) \ /eap/3test/toolchain/mkimage/tools/imagetool.h \ /eap/3test/toolchain/mkimage/include/image.h \ $(wildcard include/config/fit.h) \ $(wildcard include/config/fit/verbose.h) \ $(wildcard include/config/spl/build.h) \ $(wildcard include/config/spl/crc32/support.h) \ $(wildcard include/config/spl/md5/support.h) \ $(wildcard include/config/spl/sha1/support.h) \ $(wildcard include/config/spl/sha256/support.h) \ $(wildcard include/config/crc32.h) \ $(wildcard include/config/md5.h) \ $(wildcard include/config/sha1.h) \ $(wildcard include/config/sha256.h) \ $(wildcard include/config/fit/disable/sha256.h) \ $(wildcard include/config/sys/boot/ramdisk/high.h) \ $(wildcard include/config/sys/boot/get/cmdline.h) \ $(wildcard include/config/of/board/setup.h) \ $(wildcard include/config/lmb.h) \ $(wildcard include/config/timestamp.h) \ $(wildcard include/config/cmd/date.h) \ $(wildcard include/config/image/format/legacy.h) \ $(wildcard include/config/sys/boot/get/kbd.h) \ $(wildcard include/config/fit/signature.h) \ $(wildcard include/config/fit/best/match.h) \ $(wildcard include/config/android/boot/image.h) \ /eap/3test/toolchain/mkimage/include/hash.h \ $(wildcard include/config/sha1sum/verify.h) \ $(wildcard include/config/crc32/verify.h) \ $(wildcard include/config/hash/verify.h) \ /eap/3test/toolchain/mkimage/include/libfdt.h \ /eap/3test/toolchain/mkimage/include/fdt_support.h \ /usr/include/openssl/evp.h \ /usr/include/x86_64-linux-gnu/openssl/opensslconf.h \ $(wildcard include/config/header/bn/h.h) \ $(wildcard include/config/header/rc4/locl/h.h) \ $(wildcard include/config/header/bf/locl/h.h) \ $(wildcard include/config/header/des/locl/h.h) \ /usr/include/openssl/ossl_typ.h \ /usr/include/openssl/e_os2.h \ /usr/include/openssl/symhacks.h \ /usr/include/openssl/bio.h \ /usr/include/openssl/crypto.h \ /usr/include/openssl/stack.h \ /usr/include/openssl/safestack.h \ /usr/include/openssl/opensslv.h \ /usr/include/openssl/objects.h \ /usr/include/openssl/obj_mac.h \ /usr/include/openssl/asn1.h \ /usr/include/openssl/bn.h \ /usr/lib/gcc/x86_64-linux-gnu/9/include/limits.h \ /usr/lib/gcc/x86_64-linux-gnu/9/include/syslimits.h \ /usr/include/limits.h \ /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ /usr/include/x86_64-linux-gnu/bits/local_lim.h \ /usr/include/linux/limits.h \ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ /usr/include/x86_64-linux-gnu/bits/uio_lim.h \ /eap/3test/toolchain/mkimage/include/u-boot/rsa-checksum.h \ /eap/3test/toolchain/mkimage/include/u-boot/sha256.h \ /usr/include/openssl/rsa.h \ /usr/include/openssl/pem.h \ /usr/include/openssl/x509.h \ /usr/include/openssl/buffer.h \ /usr/include/openssl/ec.h \ /usr/include/openssl/ecdsa.h \ /usr/include/openssl/ecdh.h \ /usr/include/openssl/dsa.h \ /usr/include/openssl/dh.h \ /usr/include/openssl/sha.h \ /usr/include/openssl/x509_vfy.h \ /usr/include/openssl/lhash.h \ /usr/include/openssl/pkcs7.h \ /usr/include/openssl/pem2.h \ /usr/include/openssl/err.h \ /usr/include/openssl/ssl.h \ /usr/include/openssl/comp.h \ /usr/include/openssl/hmac.h \ /usr/include/openssl/kssl.h \ /usr/include/openssl/ssl2.h \ /usr/include/openssl/ssl3.h \ /usr/include/openssl/tls1.h \ /usr/include/openssl/dtls1.h \ /usr/include/openssl/pqueue.h \ /usr/include/x86_64-linux-gnu/sys/time.h \ /usr/include/openssl/ssl23.h \ /usr/include/openssl/srtp.h \ tools/lib/rsa/rsa-sign.o: $(deps_tools/lib/rsa/rsa-sign.o) $(deps_tools/lib/rsa/rsa-sign.o):
09-17
<think> 我们注意到用户提供了详细的编译依赖文件列表(deps),这表明编译工具在构建rsa-sign.o时已经成功找到了openssl/rsa.h头文件(位于/usr/include/openssl/rsa.h)。这与之前编译eapcs模块时的错误形成对比。 ### 关键差异分析 1. **编译目标不同** - 当前日志是构建**主机工具**(`USE_HOSTCC`定义),使用**主机编译器**(如gcc) - 先前错误是交叉编译**目标架构程序**(eapcs模块) 2. **路径处理机制不同** - 主机工具编译直接使用系统路径(如`/usr/include`) - 交叉编译需要隔离路径(避免污染目标环境) ### 解决方案思路 ```mermaid graph LR A[当前问题] --> B{确定构建类型} B -->|主机工具| C[使用系统OpenSSL] B -->|目标程序| D[使用交叉编译OpenSSL] D --> E[配置--sysroot和-I参数] ``` #### 修复eapcs交叉编译步骤: 1. **确认交叉编译工具链的sysroot** 在Makefile中显式声明sysroot(示例): ```makefile # 添加工具链sysroot路径(根据实际调整) SYSROOT := $(TOOLCHAIN_DIR)/sysroot CFLAGS += --sysroot=$(SYSROOT) ``` 2. **安装目标架构的OpenSSL开发包** ```bash # 示例:在sysroot中安装OpenSSL cp -r /path/to/target-openssl/include/openssl $(SYSROOT)/usr/include/ cp /path/to/target-openssl/lib/libssl.* $(SYSROOT)/usr/lib/ ``` 3. **验证配置效果** ```bash # 使用交叉编译器检查头文件 echo '#include <openssl/rsa.h>' | aarch64-openwrt-linux-musl-gcc -E -xc - >/dev/null ``` ### 永久性架构隔离方案 ```bash # 在项目配置中严格分离主机和目标机环境 cat >> Makefile.smb_priv <<EOF ifeq (\$(CONFIG_CROSS_COMPILE),) # 主机工具配置 OPENSSL_INCLUDE = -I/usr/include else # 交叉编译配置 OPENSSL_INCLUDE = -I\$(SYSROOT)/usr/include endif CFLAGS += \$(OPENSSL_INCLUDE) EOF ``` §§相关问题§§ 1. 在同一个项目中如何同时管理主机工具和目标程序的编译路径? 2. 如何为交叉编译环境创建完整的第三方库开发包副本? 3. Makefile中如何自动检测并应用sysroot配置? 4. 当主机和目标机的OpenSSL版本不兼容时如何处理? 5. 如何验证交叉编译环境中的头文件和库文件架构匹配性? </think> ### 依赖分析与编译路径确认 您提供的日志展示了 **主机工具链编译**(使用 `gcc`)的详细依赖信息,关键点如下: 1. **成功包含 OpenSSL 头文件** - 最终依赖列表中明确显示:`/usr/include/openssl/rsa.h` - 证明主机工具链(`mkimage`)已正确配置 OpenSSL 路径 2. **编译环境特性** ```mermaid graph LR A[编译类型] --> B(主机工具编译) B --> C[使用原生gcc] C --> D[搜索标准路径 /usr/include] D --> E[成功找到openssl/rsa.h] ``` 3. **与之前错误的本质区别** | 编译目标 | 编译器 | OpenSSL 路径状态 | |----------------|----------------------------------|-----------------------| | **eapcs** | aarch64-openwrt-linux-musl-gcc | ❌ 未配置交叉编译路径 | | **mkimage工具**| x86_64-linux-gnu-gcc (主机gcc) | ✅ 自动搜索 /usr/include | ### 解决方案修正 #### 核心结论: **eapcs 模块的交叉编译缺少 OpenSSL 目标平台路径配置**,需严格区分两种编译环境: #### 修复步骤: 1. **隔离交叉编译路径** 在 `eapcs` 的 Makefile 中强制指定目标平台 OpenSSL 路径: ```makefile # 添加交叉编译专用路径(示例) SYSROOT := /eap/3test/staging_dir/target CFLAGS += --sysroot=$(SYSROOT) -I$(SYSROOT)/usr/include ``` 2. **验证目标平台 OpenSSL 安装** ```bash # 检查目标架构的 OpenSSL 头文件 find /eap/3test/staging_dir/target/usr/include -name rsa.h # 若无结果则需安装 make -C package/openssl install ``` 3. **编译测试命令** ```bash cd /eap/3test/smb_priv/apps/eapcs make clean make CFLAGS="--sysroot=/eap/3test/staging_dir/target -I/eap/3test/staging_dir/target/usr/include" ``` #### 环境隔离最佳实践: ```bash # 在顶层 Makefile 中区分编译类型 ifeq ($(CROSS_COMPILE),aarch64-openwrt-linux-musl-) CFLAGS += -I$(TARGET_SYSROOT)/usr/include # 目标平台路径 else CFLAGS += -I/usr/include # 主机工具路径 endif ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值