#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 Projects)
4星 · 超过85%的资源 需积分: 3 20 下载量 129 浏览量
2018-01-15
20:50:42
上传
评论
收藏 614KB GZ 举报
温馨提示
共1649个文件
py:474个
gyp:425个
c:183个
GYP(Generate Your Projects)是由 Chromium 团队开发的跨平台自动化项目构建工具,Chromium 便是通过 GYP 进行项目构建管理。
资源推荐
资源详情
资源评论
收起资源包目录
GYP(Generate Your Projects) (1649个子文件)
override_asm.asm 277B
a.asm 109B
safeseh_zero.asm 109B
safeseh_zero64.asm 94B
asm-function.assem 199B
AUTHORS 508B
dummy.bar 218B
foo.bar 201B
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 534B
program.c 494B
staticlib.c 451B
GypKext.c 447B
calculate.c 444B
defines.c 444B
prog3.c 412B
prog1.c 412B
prog2.c 412B
foo.c 406B
test.c 402B
prog3.c 380B
b.c 375B
sharedlib.c 367B
hello.c 362B
program.c 361B
main.c 349B
win-driver-target-type.c 345B
configurations.c 334B
program.c 326B
hello2.c 313B
hello.c 304B
hello.c 304B
test.c 298B
subdir_includes.c 297B
cflags.c 296B
program.c 279B
hello.c 277B
precomp.c 277B
mymalloc.c 276B
prog1.c 275B
prog2.c 275B
main.c 262B
main-crt.c 261B
valid_c.c 258B
program.c 251B
prog.c 250B
defines-escaping.c 248B
hello.c 247B
hello.c 247B
there.c 247B
module.c 244B
hello.c 243B
hello.c 243B
hello.c 243B
hello.c 243B
warn_about_missing_newline.c 242B
hello2.c 241B
hello2.c 239B
input_dirname.c 234B
c.c 228B
test.c 228B
test.input_root.c 228B
test.c 228B
configurations.c 226B
input_ext.c 226B
foo.c 225B
a.c 218B
configurations.c 216B
program.c 214B
b.c 213B
d.c 213B
hello.c 212B
c.c 212B
file.c 210B
a.c 209B
a.c 208B
mylib.c 198B
mylib.c 198B
b3.c 195B
main.c 187B
main.c 187B
main.c 187B
main.c 187B
main.c 187B
main.c 187B
file.c 186B
file.c 186B
program.c 176B
共 1649 条
- 1
- 2
- 3
- 4
- 5
- 6
- 17
资源评论
- Tony-老师2018-04-16还不错,可以编译
hijunmeng
- 粉丝: 103
- 资源: 33
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功