#include <stdio.h>
#include <stdlib.h>
#if defined(PLATFORM_WIN)
#include <windows.h>
#elif defined(PLATFORM_MAC) || defined(PLATFORM_LINUX)
#include <dlfcn.h>
#include <libgen.h>
#include <string.h>
#include <sys/param.h>
#define MAX_PATH PATH_MAX
#endif
#if defined(PLATFORM_WIN)
#define MODULE_SUFFIX ".dll"
#elif defined(PLATFORM_MAC)
#define MODULE_SUFFIX ".so"
#elif defined(PLATFORM_LINUX)
#define MODULE_SUFFIX ".so"
#endif
typedef void (*module_symbol)(void);
char bin_path[MAX_PATH + 1];
void CallModule(const char* module) {
char module_path[MAX_PATH + 1];
const char* module_function = "module_main";
module_symbol funcptr;
#if defined(PLATFORM_WIN)
HMODULE dl;
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
if (_splitpath_s(bin_path, drive, _MAX_DRIVE, dir, _MAX_DIR,
NULL, 0, NULL, 0)) {
fprintf(stderr, "Failed to split executable path.\n");
return;
}
if (_makepath_s(module_path, MAX_PATH, drive, dir, module, MODULE_SUFFIX)) {
fprintf(stderr, "Failed to calculate module path.\n");
return;
}
dl = LoadLibrary(module_path);
if (!dl) {
fprintf(stderr, "Failed to open module: %s\n", module_path);
return;
}
funcptr = (module_symbol) GetProcAddress(dl, module_function);
if (!funcptr) {
fprintf(stderr, "Failed to find symbol: %s\n", module_function);
return;
}
funcptr();
FreeLibrary(dl);
#elif defined(PLATFORM_MAC) || defined(PLATFORM_LINUX)
void* dl;
char* path_copy = strdup(bin_path);
char* bin_dir = dirname(path_copy);
int path_size = snprintf(module_path, MAX_PATH, "%s/%s%s", bin_dir, module,
MODULE_SUFFIX);
free(path_copy);
if (path_size < 0 || path_size > MAX_PATH) {
fprintf(stderr, "Failed to calculate module path.\n");
return;
}
module_path[path_size] = 0;
dl = dlopen(module_path, RTLD_LAZY);
if (!dl) {
fprintf(stderr, "Failed to open module: %s\n", module_path);
return;
}
funcptr = dlsym(dl, module_function);
if (!funcptr) {
fprintf(stderr, "Failed to find symbol: %s\n", module_function);
return;
}
funcptr();
dlclose(dl);
#endif
}
int main(int argc, char *argv[])
{
fprintf(stdout, "Hello from program.c\n");
fflush(stdout);
#if defined(PLATFORM_WIN)
if (!GetModuleFileName(NULL, bin_path, MAX_PATH)) {
fprintf(stderr, "Failed to determine executable path.\n");
return 1;
}
#elif defined(PLATFORM_MAC) || defined(PLATFORM_LINUX)
// Using argv[0] should be OK here since we control how the tests run, and
// can avoid exec and such issues that make it unreliable.
if (!realpath(argv[0], bin_path)) {
fprintf(stderr, "Failed to determine executable path (%s).\n", argv[0]);
return 1;
}
#endif
CallModule("lib1");
CallModule("lib2");
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
GYP Generate Your Project 一个很有价值的构建系统
共2444个文件
svn-base:1163个
py:385个
gyp:332个
5星 · 超过95%的资源 需积分: 10 37 下载量 104 浏览量
2014-04-01
09:17:38
上传
评论
收藏 1.88MB RAR 举报
温馨提示
GYP(Generate Your Projects)是由 Chromium 团队开发的跨平台自动化项目构建工具,Chromium 便是通过 GYP 进行项目构建管理。GYP 和 CMake 最大区别在于配置文件的编写方式和其中蕴含的思想。
资源推荐
资源详情
资源评论
收起资源包目录
GYP Generate Your Project 一个很有价值的构建系统 (2444个子文件)
override_asm.asm 277B
asm-function.assem 199B
AUTHORS 284B
somecmd.bat 265B
as.bat 226B
gyp.bat 201B
samples.bat 196B
bat with spaces.bat 182B
go.bat 182B
as.bat 59B
stuff.blah 18B
program.c 3KB
check-version-min.c 1KB
check-version-min.c 1KB
main.c 683B
file.c 658B
includes.c 552B
program.c 519B
staticlib.c 475B
defines.c 462B
calculate.c 444B
prog3.c 430B
prog1.c 430B
prog2.c 430B
test.c 402B
prog3.c 398B
sharedlib.c 383B
hello.c 380B
program.c 379B
b.c 375B
configurations.c 352B
main.c 349B
program.c 344B
hello.c 322B
hello.c 322B
subdir_includes.c 315B
cflags.c 314B
hello2.c 313B
test.c 298B
program.c 297B
hello.c 295B
prog1.c 293B
prog2.c 293B
precomp.c 277B
prog.c 268B
defines-escaping.c 266B
hello.c 265B
there.c 265B
hello.c 265B
main.c 262B
mymalloc.c 262B
main-crt.c 261B
hello.c 261B
hello.c 261B
hello.c 260B
hello2.c 259B
valid_c.c 258B
module.c 244B
configurations.c 244B
warn_about_missing_newline.c 242B
hello2.c 239B
input_dirname.c 234B
configurations.c 234B
program.c 232B
test.input_root.c 228B
test.c 228B
test.c 228B
c.c 228B
input_ext.c 226B
foo.c 225B
a.c 218B
b.c 213B
d.c 213B
hello.c 212B
c.c 212B
file.c 210B
a.c 209B
a.c 208B
mylib.c 198B
b3.c 195B
program.c 194B
program.c 190B
program.c 190B
main.c 187B
main.c 187B
main.c 187B
main.c 187B
file.c 186B
file.c 186B
main.c 175B
main.c 173B
main.c 173B
prog5.c 172B
empty.c 171B
file_g.c 171B
file.c 171B
file_h.c 171B
lib1_moveable.c 165B
lib2_moveable.c 165B
prog4.c 164B
共 2444 条
- 1
- 2
- 3
- 4
- 5
- 6
- 25
资源评论
- yghwlkt2014-09-04有一定参考价值
- xa7100322015-06-10有一定参考价值
- layerx2015-04-23有一定参考价值
lailizhen
- 粉丝: 3
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功