so

1、有些事,我们明知道是错的,也要去坚持,因为不甘心;有些人,我们明知道是爱的,也要去放弃,因为没结局;有时候,我们明知道没路了,却还在前行,因为习惯了。

  2、以为蒙上了眼睛,就可以看不见这个世界;以为捂住了耳朵,就可以听不到所有的烦恼;以为脚步停了下来,心就可以不再远行;以为我需要的爱情,只是一个拥抱。

  3、那些已经犯过的错误,有一些是因为来不及,有一些是因为刻意躲避,更多的时候是茫然地站到了一边。我们就这样错了一次又一次,却从不晓得从中汲取教训,做一些反省。

  4、你不知道我在想你,是因为你不爱我,我明明知道你不想我,却还爱你,是因为我太傻。也许有时候,逃避不是因为害怕去面对什么,而是在等待什么。

  5、天空没有翅膀的痕迹,但鸟儿已经飞过;心里没有被刀子割过,但疼痛却那么清晰。这些胸口里最柔软的地方,被爱人伤害过的伤口,远比那些肢体所受的伤害来得犀利,而且只有时间,才能够治愈。

  6、很多人,因为寂寞而错爱了一人,但更多的人,因为错爱一人,而寂寞一生。我们可以彼此相爱,却注定了无法相守。不是我不够爱你,只是我不敢肯定,这爱,是不是最正确的。

  7、如果背叛是一种勇气,那么接受背叛则需要一种更大的勇气。前者只需要有足够的勇敢就可以,又或许只是一时冲动,而后者考验的却是宽容的程度,绝非冲动那么简单,需要的唯有时间。

  8、生命无法用来证明爱情,就像我们无法证明自己可以不再相信爱情。在这个城市里,诚如劳力士是物质的奢侈品,爱情则是精神上的奢侈品。可是生命脆弱无比,根本没办法承受那么多的奢侈。

  9、人最大的困难是认识自己,最容易的也是认识自己。很多时候,我们认不清自己,只因为我们把自己放在了一个错误的位置,给了自己一个错觉。所以,不怕前路坎坷,只怕从一开始就走错了方向。

  10、生活在一个城市里,或者爱一个人,又或者做某件事,时间久了,就会觉得厌倦,就会有一种想要逃离的冲动。也许不是厌倦了这个城市、爱的人、坚持的事,只是给不了自己坚持下去的勇气。

  11、多少次又多少次,回忆把生活划成一个圈,而我们在原地转了无数次,无法解脱。总是希望回到最初相识的地点,如果能够再一次选择的话,以为可以爱得更单纯。

  12、如果你明明知道这个故事的结局,你或者选择说出来,或者装作不知道,万不要欲言又止。有时候留给别人的伤害,选择沉默比选择坦白要痛多了。

08-17
生成和使用 `.so`(共享对象)文件是 C++ 开发中常见的需求,尤其是在构建动态链接库以供多个程序复用时。以下是 C++ 生成和使用 `.so` 文件的方法。 ### 生成 `.so` 文件 1. **编写源文件和头文件** 首先,需要定义一个头文件(如 `test.h`),其中声明将在 `.so` 中暴露的函数或类接口。例如: ```cpp // test.h #ifndef __TEST__ #define __TEST__ int funcAdd(int x, int y); #endif ``` 然后,实现该接口的源文件(如 `test.cpp`): ```cpp // test.cpp #include "test.h" int funcAdd(int x, int y) { return x + y; } ``` 2. **编译生成 `.so` 文件** 使用 `g++` 编译器,通过 `-fPIC` 选项生成位置无关代码,并使用 `-shared` 选项指定生成共享库: ```bash g++ -fPIC -shared test.cpp -o libtest.so ``` 这将在当前目录下生成名为 `libtest.so` 的动态库文件 [^1]。 ### 使用 `.so` 文件 1. **编写使用 `.so` 的程序** 创建一个使用动态库接口的程序文件(如 `main.cpp`): ```cpp // main.cpp #include <iostream> #include "test.h" int main() { std::cout << "Result: " << funcAdd(3, 4) << std::endl; return 0; } ``` 2. **编译并链接 `.so` 文件** 编译 `main.cpp` 时,需要指定动态库的路径和名称。假设 `libtest.so` 位于当前目录: ```bash g++ main.cpp -L. -ltest -o main_program ``` 其中: - `-L.` 表示在当前目录查找库文件。 - `-ltest` 表示链接名为 `libtest.so` 的库(省略 `lib` 前缀和 `.so` 后缀) [^2]。 3. **运行程序** 在运行程序前,确保动态链接器可以找到 `.so` 文件。可以通过设置 `LD_LIBRARY_PATH` 来指定库路径: ```bash export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./main_program ``` 这将输出 `Result: 7`,表明成功调用了 `.so` 文件中的函数 [^1]。 ### 与 `.a` 静态库的区别 与 `.a` 文件不同,`.so` 文件在编译时不直接嵌入到可执行文件中,而是在运行时动态加载。这种方式可以减少可执行文件的大小,并允许库的更新不影响依赖它的程序 [^3]。 ### 跨平台编译 `.so` 文件(如 Android) 在 Android 平台上,可以通过 Android NDK 编译生成 `.so` 文件。创建 `Application.mk` 文件并配置 `APP_ABI` 指定目标架构: ```makefile APP_ABI := all ``` 然后使用 `ndk-build` 命令进行编译,将生成支持多种架构的 `.so` 文件 [^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值